Pertanyaan terkait: memulai koneksi ssh dari server ke klien
Jawaban dari sana banyak membantu saya, perintah ini melakukan apa yang saya butuhkan:
ssh -R 2225:localhost:22 loginOfServerWithPublicIP@publicIP
Jadi saya menulis skrip untuk menghubungkan kembali setiap saat:
#!/bin/bash
while true; do
echo "try to connect..."
ssh -o ServerAliveInterval=240 -R 2225:localhost:22 user@host
echo "restarting in 5 seconds.."
sleep 5
done
Dan menambahkannya ke /etc/crontab
. Tetapi saya menemukan bahwa bekerja jika saja saya mengeksekusi "dengan tangan" dari shell, tetapi jika itu disebut oleh cron, ssh menghubungkan dan segera selesai. (jadi, skrip di atas terhubung kembali sepanjang waktu)
Dari man ssh
, saya menemukan bahwa untuk koneksi latar belakang saya harus menyebutnya dengan -n
kunci, tetapi itu tidak membantu. Kemudian, saya hanya mencari-cari skrip yang mirip dan saya menemukan bahwa itu berfungsi jika saya memanggil tail -f something
, yaitu beberapa perintah "neverending", jadi saya baru saja membuat file kosong /tmp/dummy_file
dan sekarang perintah ssh saya terlihat seperti ini:
ssh -o ServerAliveInterval=240 -R 2225:localhost:22 -n user@host tail -f /tmp/dummy_file
Berhasil sekarang! Tapi, solusi ini sepertinya agak jelek, ditambah lagi saya tidak terlalu mengerti alasan sebenarnya dari perilaku itu. Secara kebetulan, saya mencoba menelepon bash
alih-alih tail -f
( bash
menurut saya, perintah "tidak pernah berakhir" juga), tetapi tidak berhasil.
Jadi, dapatkah orang menjelaskan perilaku ini, dan apa cara yang benar untuk membuat koneksi ssh latar belakang untuk menjaga terowongan ssh terbalik?
sumber
&
pada akhir perintah ssh Anda:ssh -o ServerAliveInterval=240 -R 2225:localhost:22 user@host &
while
loop saya akan berjalan lagi dan lagi, memulaissh
koneksi latar belakang baru setiap 5 detik, kan? Ini bukan yang saya butuhkan.Jawaban:
Sepertinya Anda ingin
-N
opsi untuk ssh.sumber
Saya sangat menyarankan Anda mempertimbangkan
autossh
. Ini memiliki heuristik tertentu yang akan memungkinkannya untuk menentukan apakah kehilangan koneksi adalah alasan yang mendasari dan akan menurunkan frekuensi upaya koneksi ulang. Selain itu memantau koneksi menggunakan terowongan ekstra, yang membuatnya sangat berguna untuk skenario seperti yang Anda tanyakan.Jika Anda menggunakan Ubuntu, misalnya, Anda dapat melakukan pencarian di web untuk
autossh upstart
menemukan beberapa contoh berguna tentang cara mengkonfigurasi Ubuntu sehingga terowongan tetap dipertahankan dengan cara yang terus-menerus.Saya menggunakan ini untuk menjaga koneksi tunnel terbuka ke server saya setiap saat untuk layanan tertentu.
sumber
autossh
, saya sudah membaca artikel ini: goo.gl/jVuuSR , tetapi itu hanya bekerja untuk saya jika saya memiliki koneksi Internet segera pada boot sistem; tetapi jika koneksi dibuat kemudian, itu tidak berhasil. Tidak yakin, mungkin saya melakukan sesuatu yang salah, tetapi bahkan dalam artikel ini penulis memilikisleep 10
di dalamnya/etc/rc.local
, untuk memastikan koneksi internet sudah siap ketika autossh dipanggil.upstart
dan penggantian init lainnya, Anda dapat mengikat awal terowongan dengan satu atau beberapa perangkat jaringan yang aktif. Solusi terbaik (IMO) di web adalah yang ini: erik.torgesta.com/tag/ssh-upstart ... dan toh tidaksleep 10
akan ada gunanya dalam beberapa kasus tepi.ssh-upstart
, saya akan melihatnya!Saya akan saran kedua @ 0xC0000022L dan digunakan
autossh
juga. Saya menggunakannya untuk mempertahankan koneksi SSH dari laptop saya karena saya mengambilnya dari satu tempat ke tempat lain dan hanya berfungsi. Saya menggunakan koneksi ini untuk tunnel back port 25 dan 2143 untuk akses ke server SMTP dan IMAP pribadi saya.Berikut skrip yang saya gunakan:
Saya kemudian memelihara
Host
entri dalam$HOME/.ssh/config
file saya untuk hostimap-o
.The
autossh_mail.sh
Script dijalankan sebagai bagian dari desktop saya ketika saya log in. Anda dapat mengaksesnya melaluignome-session-properties
.sumber