Saya mencoba kode shell-script yang menggunakan koneksi ssh untuk melakukan "detak jantung". Saya ingin mengakhiri sisi klien dan server dari koneksi itu setelah batas waktu tertentu (setelah koneksi turun).
Apa yang saya temukan sejauh ini:
- TCPKeepAlive ya / tidak untuk ssh dan sshd
- ClientAliveCountMax untuk sshd
- ClientAliveInterval untuk sshd
- ServerAliveCountMax untuk ssh
- ServerAliveInterval untuk ssh
Untuk mengubah "ClientAliveCountMax" saya harus memodifikasi sshd_config pada setiap mesin target (opsi ini dinonaktifkan secara default).
Jadi pertanyaan saya adalah - dapatkah saya menggunakan "TCPKeepAlive" untuk tujuan saya juga (tanpa mengubah apa pun pada mesin sumber / target)?
Sistem operasi target adalah SLES11 SP2 - tapi saya tidak berpikir itu relevan di sini.
ControlMaster
opsi dan menggunakan koneksi slave?Jawaban:
Anda mungkin ingin menggunakan pengaturan ServerAlive untuk ini. Mereka tidak memerlukan konfigurasi apa pun di server, dan dapat diatur pada baris perintah jika diinginkan.
Ini akan mengirim pesan keepalive ssh setiap 5 detik, dan jika tiba saatnya untuk mengirim keepalive lain, tetapi respons terhadap yang terakhir tidak diterima, maka koneksi terputus.
Perbedaan kritis antara
ServerAliveInterval
danTCPKeepAlive
adalah lapisan tempat mereka beroperasi.TCPKeepAlive
beroperasi pada lapisan TCP. Ia mengirim paket TCP ACK kosong. Firewall dapat dikonfigurasi untuk mengabaikan paket-paket ini, jadi jika Anda pergi melalui firewall yang menjatuhkan koneksi idle, ini mungkin tidak membuat koneksi tetap hidup.ServerAliveInterval
beroperasi pada lapisan ssh. Ini benar-benar akan mengirim data melalui ssh, sehingga paket TCP telah mengenkripsi data di dalamnya dan firewall tidak dapat memastikan apakah itu paket keepalive, atau yang sah, sehingga ini bekerja lebih baik.sumber
Seconds between keepalives
menjadi 1800 di bawah Pengaturan | Koneksi.The
TCPKeepAlive
pilihan adalah benar-benar metode yang sangat berbeda dari menjaga koneksi hidup dari pilihan ClientAlive-suka atau ServerAlive-seperti.Sesuai dengan halaman manual BSD SSH , kita dapat membaca bahwa:
The
TCPKeepAlive
pastikan apakah sistem harus mengirim pesan TCP keepalive ke sisi lain. Opsi default selalu diaktifkan.Jika Anda menggunakan
ClientAliveInterval
, Anda dapat menonaktifkanTCPKeepAlive
. Opsi ini akan mengirim pesan melalui saluran terenkripsi untuk meminta tanggapan dari klien (standarnya adalah 0, jadi tidak ada pesan yang dikirim ke klien) danClientAliveCountMax
menetapkan jumlah pesan hidup klien sebelum sshd akan memutuskan koneksi klien, dengan menghentikan sidang.sumber