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 ssh
pada port di localhost.
The plutil
perintah mengatakan konfigurasi saya adalah OK. launchctl load path-to-plist
berjalan tanpa kesalahan.
Ketika saya menjalankan launchctl list
agen 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.
ProgramArguments
harus dibagi menjadi 4<string>…</string>
, satu untuk masing-masingargv[i]
, sebagai<string>-F</string>…
.Jawaban:
OK, menjawab pertanyaan kedua Anda terlebih dahulu ( apakah plist saya benar? ),
plutil
(Dalam doa standarnya) "lints" (memeriksa)plist
file untuk kebenaran:Setara dengan:
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 keplist
:Coba muat ulang
plist
dan kemudian periksa log Anda:Beberapa pengamatan tambahan:
Pemahaman saya tentang Anda
inetdCompatibility
adalah bahwa agen harus mulai ketika itu dimuat. Namun, Anda mengatakan itulaunchctl list
tidak menunjukkan agen. Apakah itu berubah jika Anda mencobalaunchctl start com.my.ssh_tunnel
setelah memuatplist
? Apakah log menunjukkan sesuatu yang baru?Saya tidak sepenuhnya memahami hubungan antara
Program
danProgramArguments
- bisa saja saya, tetapi saya menemukanman launchd.plist
penjelasan tentangProgramArguments
kesusahan. Aku akan cenderung untuk mencoba menambahkan/usr/bin/ssh
sebagai pertamastring
diProgramArguments
, dan menghapus entri untukProgram
. (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
ProgramArguments
seperti ini (saya telah menambahkanusr/bin/ssh
seperti yang disebutkan di atas):Alasan saya untuk ini adalah, beberapa
plist
s yang dapat saya temukan di sistem saya yang menggunakan (lebih dari satu)ProgramArguments
menggunakan idiom ini:Perhatikan bagaimana
bash
's-c
pilihan dan sesuaicommand_string
dalam argumen terpisah.sumber