Memuat Peluncuran Pengguna, Berhasil

3

Saya telah membuat file plist untuk menggantikan proses xinetd yang berhasil saya gunakan di Windows (Cygwin) dan Linux untuk mengalirkan koneksi imapd dari server jarak jauh melalui sshpada port di localhost.

The plutilperintah mengatakan konfigurasi saya adalah OK. launchctl load path-to-plistberjalan tanpa kesalahan.

Ketika saya menjalankan launchctl listagen tidak ditampilkan. Ketika saya mencoba untuk terhubung ke port di localhost, koneksi saya ditolak.

Ini file plist saya:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
            <string>com.my.ssh_tunnel</string>
        <key>Program</key>
            <string>/usr/bin/ssh</string>
        <key>ProgramArguments</key>
            <array>
                    <string>-F /Users/userx/.ssh/config</string>
                    <string>dname /usr/sbin/imapd</string>
            </array>
        <key>Sockets</key>
            <dict>
                <key>Listeners</key>
                <dict>
                    <key>SockServiceName</key>
                        <string>dname-imapd</string>
                    <key>SockType</key>
                        <string>stream</string>
                    <key>SockProtocol</key>
                        <string>TCP</string>
                </dict>
            </dict>
        <key>inetdCompatibility</key>
            <dict>
                <key>Disabled</key>
                <false/>
                <key>Wait</key>
                <false/>
            </dict>
        <key>EnvironmentVariables</key>
            <dict>
                <key>SSH_AUTH_SOCK</key>
                    <string>/Users/userx/.ssh-agent.sock</string>
            </dict>
    </dict>
</plist>

Saya telah menambahkan baris ke / etc / services untuk dname-imapd dan port yang belum ditetapkan (49022). Pada akhirnya saya akan menggunakan ini bersama dengan ssh-agent (untuk membuat ini berfungsi 'tanpa kata sandi') dan Thunderbird untuk mengambil email dari sistem yang sangat terkunci.

Pada dasarnya ada dua pertanyaan di sini. Satu, bagaimana saya tahu agen saya sedang dimuat (dan bagaimana saya mengkonfirmasi itu)? Dua, apakah plist-ku benar?

Ini konfigurasi xinetd asli saya :

service imapssh
{
        disable         = no
        type            = UNLISTED
        port            = 2208
        socket_type     = stream
        protocol        = tcp
        wait            = no
        server          = /usr/bin/ssh
        server_args     = dname /usr/sbin/imapd
        user            = userx
}

Terima kasih atas bantuannya. Ini membuatku sedikit gila.

Ini ada di El Capitan Macbook Pro.

Juga, saya sudah mencoba terowongan ssh lurus tapi itu tidak benar-benar berfungsi (sebelum ada yang menyarankan). Kecuali ada yang tahu cara membuatnya seperti inetd dan spawn setiap kali klien email terhubung ke port.

mrmacross
sumber
1
Saya pikir array Anda ProgramArgumentsharus dibagi menjadi 4 <string>…</string>, satu untuk masing-masing argv[i], sebagai <string>-F</string>….
dan
Plist yang sudah ada dan berfungsi sepertinya tidak memiliki masalah dengan lebih dari satu string di dalam tag string.
mrmacross

Jawaban:

1

OK, menjawab pertanyaan kedua Anda terlebih dahulu ( apakah plist saya benar? ), plutil(Dalam doa standarnya) "lints" (memeriksa) plistfile untuk kebenaran:

plutil ~/Library/LaunchAgents/local.brew.update.plist

Setara dengan:

plutil -lint ~/Library/LaunchAgents/local.brew.update.plist

Beralih ke pertanyaan pertama Anda ( bagaimana saya tahu agen saya sedang dimuat (dan bagaimana saya mengonfirmasi itu)? ), Berikut adalah beberapa hal untuk membantu memeriksanya.

Pertama, saya sarankan menambahkan logging untuk membantu debugging. Saya masuk ~/Library/Logs, jadi tambahkan sesuatu seperti ini ke plist:

<key>StandardOutPath</key>
<string>/Users/userx/Library/Logs/local.brew.update.stdout</string>
<key>StandardErrorPath</key>
<string>/Users/userx/Library/Logs/local.brew.update.stderr</string>

Coba muat ulang plistdan kemudian periksa log Anda:

less ~/Library/Logs/local.brew.update.stdout
less ~/Library/Logs/local.brew.update.stderr

Beberapa pengamatan tambahan:

Pemahaman saya tentang Anda inetdCompatibilityadalah bahwa agen harus mulai ketika itu dimuat. Namun, Anda mengatakan itu launchctl listtidak menunjukkan agen. Apakah itu berubah jika Anda mencoba launchctl start com.my.ssh_tunnelsetelah memuat plist? Apakah log menunjukkan sesuatu yang baru?

Saya tidak sepenuhnya memahami hubungan antara Programdan ProgramArguments- bisa saja saya, tetapi saya menemukan man launchd.plistpenjelasan tentang ProgramArgumentskesusahan. Aku akan cenderung untuk mencoba menambahkan /usr/bin/sshsebagai pertama stringdi ProgramArguments, dan menghapus entri untuk Program. (Kemudian muat ulang dan periksa log. Mulai ulang dan periksa log jika perlu).

Akhirnya, saya cukup yakin bahwa @ daniel-Azuelos benar, dan Anda perlu menentukan ProgramArgumentsseperti ini (saya telah menambahkan usr/bin/sshseperti yang disebutkan di atas):

<key>ProgramArguments</key>
<array>
    <string>/usr/bin/ssh</string>
    <string>-F</string>
    <string>/Users/userx/.ssh/config</string>
    <string>dname</string>
    <string>/usr/sbin/imapd</string>
</array>

Alasan saya untuk ini adalah, beberapa plists yang dapat saya temukan di sistem saya yang menggunakan (lebih dari satu) ProgramArgumentsmenggunakan idiom ini:

<key>Label</key>
<string>com.divx.uninstall.preferences</string>
<key>ProgramArguments</key>
<array>
    <string>/bin/bash</string>
    <string>-c</string>
    <string>if [[ ! -e "/Applications/DivX/DivX Preferences.app" ]] ; then open "/Library/Application Support/DivX/Uninstall DivX for Mac.app"; fi</string>
</array>

Perhatikan bagaimana bash's -cpilihan dan sesuai command_stringdalam argumen terpisah.

John N.
sumber