Apa yang sebenarnya dilakukan oleh ServerAliveCountMax di SSH?
Saya mencoba memastikan bahwa ketika saya terhubung ke server saya melalui SSH bahwa koneksi tetap terbuka untuk jangka waktu yang lama alih-alih koneksi mati setelah beberapa saat tidak aktif. Ini adalah contohnya
Host *
ServerAliveInterval 60
ServerAliveCountMax 2
Saya pernah mendengar dari satu sumber bahwa pengaturan di atas akan selalu mengirim respons ke server setiap 60 detik selama server menerima respons itu. Namun jika karena alasan apa pun respons tidak masuk ke server, ia akan mencoba dan mengirim pesan lain. Jika pesan itu gagal juga, maka itu akan menutup koneksi. (Saya merasa ini salah)
Sumber kedua dan ketiga mengatakan sesuatu yang berbeda. Mereka mengklaim bahwa pesan akan dikirim ke server setiap 60 detik jika ada periode tidak aktif, tetapi hanya akan mengirim melalui 2 permintaan dan kemudian akan menutup koneksi.
Jadi apa sebenarnya yang dilakukan ServerAliveCountMax?
Interval
set untuk0
menonaktifkannya. Tapi itu tidak jelas jika Anda mengaturMax
untuk0
. Apakah itu mengirim ping Alive tak terbatas, atau tidak ada?Pesan hidup server berguna ketika server SSH telah dikonfigurasikan untuk menutup koneksi setelah periode waktu tanpa lalu lintas (penyedia hosting web bersama yang menawarkan akses SSH hampir selalu melakukan hal ini misalnya). Mengatur kedua opsi ini mengirim paket setiap
ServerAliveInterval
detik, untuk waktu maksimumServerAliveCountMax
sehingga menjaga sesi tetap hidup.Untuk menjawab komentar tentang ketidakpastian pengaturan opsi
0
, saya telah membaca kode sumberopenssh
implementasi, dan inilah yang saya lihat ...Pengaturan
ServerAliveInterval
untuk0
TIDAK akan mengirim paket, tetapi sesi akan tetap hidup tanpa batas dengan asumsi bahwa koneksi tidak terputus karena batas waktu TCP dan bahwa server tidak dikonfigurasi untuk menjatuhkan klien yang tidak aktif.Pengaturan
ServerAliveCountMax
untuk0
memiliki efek yang sama seperti pengaturanServerAliveInterval
untuk0
.Menyetel nilai menjadi negatif atau yang lebih besar dari
INT_MAX
(mis. 2.147.483.647) akan menghasilkan kesalahan "nilai integer ..." .Pengaturan
ServerAliveCountMax
antaraINT_MAX/1000+1
(mis. 2.147.484) hinggaINT_MAX
(yaitu 2.147.483.647) juga akan sama dengan menetapkan nilai antara0
.Jadi, pada dasarnya, batas waktu terbanyak yang bisa Anda dapatkan (saat masih mengirim paket) adalah
INT_MAX/1000
(yaitu 2,147.483). Dengan batas waktu1
dan tidak ada lalu lintas di sesi sama sekali, itu akan membuat Anda hampir 25 hari.Jelas, implementasi SSH lainnya mungkin memiliki hasil yang berbeda.
sumber