Apa batas waktu idle default untuk OpenSSH?

25

Sepertinya saya tidak dapat menemukan jawaban untuk pertanyaan sederhana ini, yang saya perlukan untuk dokumentasi kepatuhan.

Pada instalasi default CentOS 6.5 (OpenSSH 5.3p1-94.el6), setelah berapa lama menganggur sesi SSH pengguna akan dihentikan? Saya percaya yang berikut ini dapat diatur untuk meningkatkan batas waktu idle, tetapi mereka berkomentar secara default.

$ grep -i alive /etc/ssh/sshd_config
#TCPKeepAlive yes
#ClientAliveInterval 0
#ClientAliveCountMax 3

Juga, apakah ada perintah untuk membuang daftar sshdpengaturan saat ini ? Saya tidak melihat apa-apa man sshd.

Banjer
sumber
3
Beberapa kerang dapat diatur untuk keluar setelah batas waktu. Itu akan menyebabkan sesi ssh berakhir. Periksa apakah variabel lingkungan TMOUT Anda diatur.
Kenster

Jawaban:

23

Baris komentar di sshd_configbiasanya menampilkan default. Ini adalah kasus dengan semua baris dalam pertanyaan Anda. Anda dapat memverifikasi ini di halaman sshd_configmanual . Berikut cuplikan yang relevan:

TCPKeepAlive

      Menentukan apakah sistem harus mengirim pesan keepalive TCP ke sisi lain. Jika dikirim, kematian koneksi atau kerusakan salah satu mesin akan diperhatikan dengan benar. Namun, ini berarti koneksi akan mati jika rute turun sementara, dan beberapa orang merasa terganggu. Di sisi lain, jika TCP keepalives tidak terkirim, sesi dapat menggantung tanpa batas di server, meninggalkan pengguna "hantu" dan menghabiskan sumber daya server.

      Standarnya adalah "ya" (untuk mengirim pesan keepalive TCP), dan server akan melihat jika jaringan turun atau host klien lumpuh. Ini menghindari sesi menggantung yang tak terbatas.

      Untuk menonaktifkan pesan keepalive TCP, nilai harus ditetapkan ke "tidak".

      Opsi ini sebelumnya disebut KeepAlive.

ClientAliveCountMax

      Setel jumlah pesan hidup klien (lihat di bawah) yang dapat dikirim tanpa sshd (8) menerima pesan apa pun dari klien. Jika ambang ini tercapai saat pesan klien yang dikirim, sshd akan memutuskan klien, mengakhiri sesi. Penting untuk dicatat bahwa penggunaan pesan hidup klien sangat berbedaTCPKeepAlive (di bawah)(atas). Pesan klien yang masih hidup dikirim melalui saluran terenkripsi dan karenanya tidak akan dipalsukan. Opsi TCP keepalive yang diaktifkan oleh TCPKeepAlivespoofable. Mekanisme hidup klien bernilai ketika klien atau server bergantung pada mengetahui kapan suatu koneksi menjadi tidak aktif.

      Nilai default adalah 3. Jika ClientAliveInterval(lihat di bawah) diatur ke 15, dan ClientAliveCountMaxdibiarkan pada default, klien SSH yang tidak responsif akan terputus setelah sekitar 45 detik. Opsi ini hanya berlaku untuk protokol versi 2.

ClientAliveInterval

      Mengatur interval waktu habis dalam hitungan detik setelahnya jika tidak ada data yang diterima dari klien, sshd (8) akan mengirim pesan melalui saluran terenkripsi untuk meminta tanggapan dari klien. Standarnya adalah 0, menunjukkan bahwa pesan-pesan ini tidak akan dikirim ke klien. Opsi ini hanya berlaku untuk protokol versi 2.

jordanm
sumber
1
Perbaiki saya jika salah, tetapi jika tidak ada firewall di antara saya dan mesin (konfigurasi default), maka saya tidak akan pernah terputus? Saya tahu firewall kami menjatuhkan koneksi TCP idle setelah 60 menit, jadi di situlah koneksi idle penutup terjadi. Saya hanya ingin memeriksa dan melihat apakah OpenSSH sendiri secara eksplisit menutup sesi. Saya pikir jawabannya adalah Tidak, openssh tidak secara eksplisit menutup koneksi idle, tetapi firewall biasanya melakukannya. Pengaturan yang disebutkan dalam jawaban Anda benar-benar membantu untuk mempertahankan koneksi atau untuk mengakhiri sesi dengan benar jika melihat sudah terputus.
Banjer
2
Teks yang dikutip mengatakan bahwa default untuk ClientAliveInterval adalah 0, yang berarti tidak menentukan interval waktu untuk mana koneksi tetap terbuka. Namun kita tahu bahwa interval waktu memiliki nilai terbatas secara default. Karena itu, tampaknya harus ada beberapa parameter lain yang menetapkan berapa lama koneksi tetap terbuka secara default. Jika analisis saya di atas benar, maka anggap server dan klien adalah mesin linux yang menjalankan openssh, dan keduanya menggunakan semua default. Dalam hal ini sisi mana yang menetapkan default, apa nilainya, dan di mana itu diatur?
Ben Crowell
2
@ BenCrowell Namun kita tahu bahwa interval waktu memiliki nilai terbatas secara default. Apa interval waktu dan bagaimana Anda tahu ini?
Piotr Dobrogost
9

Anda dapat mengatur SSH keepalive untuk sisi klien atau server:

Sisi klien

Mengajukan: /etc/ssh/ssh_config

Konten:

Host *
ServerAliveInterval XX
ServerAliveCountMax YY

Sisi server

Mengajukan: /etc/ssh/sshd_config

Konten:

ClientAliveInterval XX
ClientAliveCountMax YY

Diambil dari: http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html

Yamanoteone
sumber
6
Berguna, tetapi tidak menjawab pertanyaan dengan cara apa pun.
bzeaman
6

OpenSSH tidak akan menghentikan sesi shell yang telah diam selama beberapa waktu. Ini bukan sesuatu yang dilakukan OpenSSH. Mengakhiri sesi shell tidak terkait dengan konfigurasi OpenSSH.

Pengaturan yang Anda tampilkan terkait dengan batas waktu saat koneksi terputus dan tidak terkait dengan shell pada host jarak jauh dan apa yang dilakukan atau tidak dilakukan pengguna di sana.

Shell host jarak jauh dapat berakhir (atau mungkin terbunuh oleh beberapa proses lain) setelah beberapa waktu idleness, tetapi ini tidak terkait dengan konfigurasi layanan SSH di server dan klien SSH Anda.

Terkait:


Untuk membuang sshdkonfigurasi, gunakan "mode uji lanjutan" sebagai root:

sshd -T

Hal ini didokumentasikan di dalam sshd(8)panduan (melihat OpenSSH_7.7, LibreSSL 2.7.2pada OpenBSD sini):

-T

Mode uji lanjut. Periksa validitas file konfigurasi, output konfigurasi efektif ke stdout dan kemudian keluar . Secara opsional, aturan Kecocokan dapat diterapkan dengan menentukan parameter koneksi menggunakan satu atau lebih -Copsi.

Opsi ini ditambahkan ke sshduntuk OpenSSH 5.1 / 5.1p1 pada 2008.

Kusalananda
sumber
3

Jika persyaratannya adalah untuk menutup koneksi SSH setelah periode tidak aktif, shells sendiri menyediakan variabel timeout.

Untuk bash:

TMOUT: Jika diatur ke nilai lebih besar dari nol, TMOUT diperlakukan sebagai batas waktu default untuk builtin baca. Perintah pilih berakhir jika input tidak tiba setelah TMOUT detik ketika input datang dari terminal. Dalam shell interaktif, nilai ditafsirkan sebagai jumlah detik untuk menunggu input setelah mengeluarkan prompt utama. Bash berakhir setelah menunggu beberapa detik jika input tidak datang.

uji ini dengan menjalankan TMOUT=10dan tunggu 10 detik untuk menutup koneksi.

Untuk tcsh:

Variabel shell autologout dapat diatur untuk logout atau mengunci shell setelah beberapa menit tidak aktif.

Dalam tcsh, sintaks untuk mengatur batas waktu selama sepuluh menit adalah set autologout=10. Ini tidak berfungsi di csh asli.

Sandeep kumar singh
sumber
-2

Jika Anda ingin batas waktu 10 detik untuk semua orang, lakukan hal berikut untuk konfigurasi server (sshd_config):

ClientAliveInterval 10
ClientAliveCountMax 0

Jika Anda ingin batas waktu 10 detik untuk klien lokal, lakukan hal berikut untuk konfigurasi klien (ssh_config):

ServerAliveInterval 10
ServerAliveCountMax 0

Jika parameter AliveCountMax non-nol, mungkin tidak akan berfungsi karena server akan membalas pengaturan ulang timer (kecuali ada masalah koneksi). Anda dapat melihat ini dengan menjalankan klien ssh dengan debugging dihidupkan.

JohnA
sumber