Bagaimana mencegah SSH dari memutuskan koneksi jika sudah menganggur untuk sementara waktu

51

Saya memiliki koneksi ssh ke mesin yang terputus oleh mesin itu setelah 30 menit tanpa input pengguna. Namun, jika saya memulai sesuatu seperti top, koneksi tetap hidup. Karena ini adalah mesin klien, saya tidak dapat mengkonfigurasi ulang server SSH mesin itu. Jadi saya mencari cara untuk secara otomatis mendeteksi kemalasan dan memulai sesuatu seperti top. Semacam "screensaver" untuk Bash.

Saya tahu bahwa saya dapat melakukannya dengan screen, tetapi sayangnya screentidak diinstal, dan saya tidak dapat menginstal perangkat lunak. Jadi saya harus menggunakan apa yang ditawarkan Bash.

Untuk memperjelas: Saya mencari solusi yang saya mulai sekali setelah masuk, dan kemudian saya ingin menggunakan terminal itu, berjalan pergi, kembali dua jam kemudian dan terus bekerja, tanpa mengetik apa pun sebelum berjalan pergi. Juga, saya tidak mencari hal-hal terowongan (untuk itu saya merekomendasikan alat hebat sshuttle )

Ada ide?

Ishak
sumber
Hanya catatan singkat untuk memperjelas layar dan Keepalive bukan hal yang sama: misalnya, jika salah ssh client atau server server terputus, sesi ssh Anda akan dihentikan bahkan jika Anda mengaktifkan KeepAlive, sementara shell layar tidak akan dihentikan. .
MariusMatutiae

Jawaban:

78

Untuk memperjelas: Saya mencari solusi yang saya mulai sekali setelah masuk, dan kemudian saya ingin menggunakan terminal itu, berjalan pergi, kembali dua jam kemudian dan terus bekerja, tanpa mengetik apa pun sebelum berjalan pergi.

Masalahnya adalah ada sesuatu (biasanya firewall atau load-balancer), yang menjatuhkan sesi idle. Jika Anda mengonfigurasi sesi keepalives, keepalives akan mencegah perangkat jaringan menganggap sesi sebagai idle.

Linux / Unix / Cygwin OpenSSH fix :
Perbaikan paling sederhana adalah dengan mengaktifkan ssh client keepalives; contoh ini akan mengirimkan ssh keepalive setiap 60 detik:

ssh -o "ServerAliveInterval 60" <SERVER_ADDRESS>

Jika Anda ingin mengaktifkan ini di semua sesi Anda, letakkan ini di /etc/ssh/ssh_configatau ~/.ssh/config:

ServerAliveInterval 60

Untuk informasi lebih lanjut, lihat halaman ssh_configmanual

Memperbaiki Dempul :

Simpan ini ke PuttTY Anda "Pengaturan Default" ...

  • Klik pada Koneksi
  • Ketik 60 menjadi "Seconds between keepalives"

putty_screenshot

Mike Pennington
sumber
21

Selain jawaban Mike Pennigton , saya ingin membuat Anda sadar ServerAliveCountMaxjuga.

  • The ServerAliveIntervalakan mengirimkan keepalive setiap x detik (default adalah 0 , yang menonaktifkan fitur ini jika tidak diatur ke sesuatu yang lain).
  • Ini akan dilakukan beberapa ServerAliveCountMaxkali jika tidak ada respons yang diterima. Nilai defaultnya ServerAliveCountMaxadalah 3 (lihat manual ssh_config ).

Contoh: Jika Anda mengatur ServerAliveIntervalke 60 dan pergi ServerAliveCountMaxapa adanya, ini berarti keepalive hanya akan menunggu selama 3 * 60 = 180 seconds = 3 menit sebelum berhenti.

Untuk meningkatkan ini ke misalnya 2 jam mencoba untuk menjaga koneksi tetap hidup, Anda dapat melakukan:

Per perintah:

Karena itu Anda harus mempertimbangkan untuk mengatur

ssh -o "ServerAliveInterval 60" -o "ServerAliveCountMax 120" <SERVER_ADDRESS>

Gigih:

Untuk membuatnya terus-menerus, tuliskan di /etc/ssh/ssh_config(akan menerapkan sistem-lebar) atau ~/.ssh/config(hanya berlaku pengguna):

ServerAliveInterval 60
ServerAliveCountMax 120

Catatan

Seperti yang ditunjukkan dengan benar , ini mungkin bukan yang Anda inginkan, tergantung pada situasi Anda:

  • Jika Anda ingin segera mengakhiri sesi segera setelah server tidak merespons lagi, Anda harus memilih nilai rendah untuk ServerAliveCountMax.
  • Jika Anda lebih tertarik untuk menjaga koneksi yang sudah terjalin (mis. Anda pergi dengan kereta api dan memiliki latensi tinggi), Anda harus memilih nilai yang lebih tinggi untuk ServerAliveCountMaxmemungkinkan sshuntuk terus mencoba membangun kembali koneksi.

Lihat juga:

Murmel
sumber
1
Maaf, tapi ini salah. ServerAliveCountMaxmenentukan jumlah pesan server yang mungkin dikirim tanpa menerima pesan apa pun dari server. Jika Anda ingin sshkeluar setelah macet (sehingga Anda dapat memulai ulang), Anda sebenarnya harus mengatur ServerAliveCountMaxke angka yang rendah . Lihat halaman manual OP yang ditautkan.
hapus
@dickick Saya harus berpikir sedikit tentang ini, tapi saya pikir Anda benar tergantung pada konteksnya, maka saya menambahkan catatan untuk menekankan konteksnya.
Murmel
2

Saya menggunakan Mobaxterm dan juga menemui masalah ini. Mobaxterm juga dikirimkan dengan opsi untuk menjaga klien tetap hidup ketika klien menganggur. Pergi ke Settings -> Configuration -> SSH. Ada bagian berjudul SSH settings, periksa opsi SSH keepalive. Maka masalahnya harus hilang.

masukkan deskripsi gambar di sini

jdhao
sumber
apakah "SSH keepalive" berfungsi dalam edisi gratis ... sesi saya terputus bahkan setelah memeriksa opsi ini
samshers
Ya itu berhasil. Masalah Anda mungkin memiliki penyebab lain.
jdhao