Sepertinya Anda membutuhkan autossh. Ini akan memantau terowongan ssh dan memulai ulang sesuai kebutuhan. Kami telah menggunakannya selama beberapa tahun dan tampaknya bekerja dengan baik.
autossh -M 20000 -f -N your_public_server -R 1234:localhost:22 -C
Detail selengkapnya tentang parameter -M di sini
Semua firewall stateful melupakan koneksi setelah tidak melihat paket untuk koneksi itu selama beberapa waktu (untuk mencegah tabel negara menjadi penuh dengan koneksi di mana kedua ujungnya mati tanpa menutup koneksi). Sebagian besar implementasi TCP akan mengirim paket keepalive setelah waktu yang lama tanpa mendengar dari pihak lain (2 jam adalah nilai umum). Namun, jika ada firewall stateful yang melupakan koneksi sebelum paket keepalive dapat dikirim, koneksi yang berumur panjang tetapi tidak aktif akan mati.
Jika demikian, solusinya adalah mencegah koneksi menjadi tidak aktif. OpenSSH memiliki opsi yang disebut ServerAliveInterval yang dapat digunakan untuk mencegah koneksi terlalu lama menganggur (sebagai bonus, ini akan mendeteksi kapan peer mati lebih cepat meskipun koneksi menganggur).
Saya telah menggunakan skrip Bash berikut untuk terus memunculkan terowongan ssh baru ketika yang sebelumnya mati. Menggunakan skrip berguna saat Anda tidak ingin atau tidak dapat menginstal paket tambahan atau menggunakan kompiler.
while true
do
ssh <ssh_options> [[email protected]]hostname
sleep 15
done
Perhatikan bahwa ini memerlukan file kunci untuk membuat koneksi secara otomatis tetapi demikian juga halnya dengan autossh.