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?
while
loop saya akan berjalan lagi dan lagi, memulai ssh
koneksi latar belakang baru setiap 5 detik, kan? Ini bukan yang saya butuhkan.
&
pada akhir perintah ssh Anda:ssh -o ServerAliveInterval=240 -R 2225:localhost:22 user@host &