Mengapa batas waktu ssh saya berbeda dengan lokasi jaringan?


15

Ketika saya masuk ke salah satu server kantor kami (yang menjalankan Fedora 10) dari rumah, sesi saya habis setelah periode aktivitas yang cukup singkat (sekitar 5 menit). Saya sudah mencoba menggunakan TcpKeepAlivedi sisi klien, tanpa efek.

Hal yang saya tidak mengerti adalah bahwa jika saya berada di kantor di LAN perusahaan, saya dapat meninggalkan sesi tidak aktif sepanjang hari tanpa waktu habis, sehingga perilaku tampaknya tergantung pada lokasi saya.

Adakah ide mengapa ini terjadi dan bagaimana mencegah timeout ketika saya tidak di LAN? Saya menggunakan klien Terminal di Mac OSX jika itu membantu.

UPDATE - Saran Dave Drager untuk menggunakan ServerAliveIntervalset ke nol dengan TcpKeepAlive=nobekerja untuk saya. Mengenai beberapa jawaban lain, ClientAlive... pengaturan tidak diterima oleh klien Mac OSX SSH.

Jawaban:


6

Ada langganan yang baik tentang masalah ini di sini .

Mereka merekomendasikan:

ssh -o TCPKeepAlive=yes

atau:

ssh -o TCPKeepAlive=no -o ServerAliveInterval=15

Namun, saya memiliki masalah di tempat kerja saya di mana saya terputus dari sesi, di mana di rumah mereka baik-baik saja. Saya percaya firewall saya (SonicWall) mungkin berdesir dengan TCPKeepAlive, mungkin karena NAT.

Klien SSH saya, SecureCRT, untungnya memiliki opsi untuk protokol "NO-OP", yang saya percaya pada dasarnya mengirim perintah yang tidak melakukan apa pun ke server. Dengan mengaktifkan ini secara manual saya dapat tetap terhubung. Tidak yakin apa yang dimiliki klien terminal MacOSX yang mirip dengan itu. Ada langganan tentang bagaimana menerapkan "NO-OP" pada baris perintah.

Terakhir, Anda mungkin ingin menggunakan Wireshark atau sniffer lain untuk menonton koneksi TCP Anda yang sebenarnya untuk mencari tahu apa yang terjadi dengannya. Itu akan menjadi cara terakhir untuk melihat mengapa kadang-kadang sambungan masih terputus.


Terima kasih, Dave - opsi ServerAliveInterval bekerja sangat baik.
gareth_bowles

@ Pernah saya dengar bahwa beberapa admin server tidak menyukai praktik ini karena dapat berupa (a) risiko keamanan, atau (b) beban server tidak beralasan. Apakah salah satu dari kekhawatiran ini valid, IYHO?
Jonathan Day

Ini adalah pengaturan pada titik akhir klien, jadi meskipun jika Anda berada dalam lingkungan yang tidak bersahabat ini mungkin menambah kemampuan seseorang untuk menipu Anda, sangat kecil kemungkinannya untuk berdampak pada keamanan koneksi. Saya juga tidak bisa melihat ini menyebabkan beban tambahan.
Dave Drager

@Dave: Saya memasukkan perintah ini tetapi mendapatkan yang berikut, penggunaan: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-d [bind_address:] port] [-e escape_char] [-F configfile] - Saya pkcs11] [-i identity_file] [-L [bind_address:] port: host: hostport] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o opsi] [-p port] [-R [ bind_address:] port: host: hostport] [-S ctl_path] [-W host: port] [-w local_tun [: remote_tun]] [user @] hostname [command]
user1050619

Perbaikan ini juga berfungsi untuk Putty. Satu-satunya pilihan yang saya harus atur adalah di Connection -> Detik antara Keepalive: 15. Sesi SSH telah hidup dan baik selama lebih dari 8 jam (Comcast), sementara biasanya akan terputus dalam <30 menit.
Dan Dascalescu

2

Ini mungkin karena ketika Anda terhubung dari rumah, Anda melewati firewall yang menutup sesi TCP setelah sedikit waktu. Tapi TcpKeepAlive harus menghindari ini. Apakah Anda mengaktifkan TcpKeepAlive di sisi klien atau di sisi server?


Saya melakukan TcpKeepAlive di sisi klien (di ~ / .ssh / config saya) - Saya pikir ini akan mengatasi masalah firewall lokal, tetapi masih sering habis.
gareth_bowles

Secara default "on" di sisi server, tetapi periksa sshd_config untuk melihat apakah belum dinonaktifkan.
radius

Beberapa firewall memutuskan koneksi TCP setelah beberapa waktu bahkan jika mereka tidak siaga.
TomOnTime

Beberapa firewall memutuskan koneksi TCP setelah beberapa waktu bahkan jika mereka tidak siaga. Cara untuk mendeteksi ini adalah untuk melihat apakah Anda terputus secara konsisten.
TomOnTime

Berikut adalah pengaturan yang saya gunakan untuk memperbaikinya: TCPKeepAlive no, ClientAliveInterval 300, ClientAliveCountMax 3
Matt Simmons

2

Saya mendapatkan ini sepanjang waktu di koneksi Comcast saya. Masalahnya adalah bahwa interval tetap-hidup klien SSH Anda terlalu lama untuk batas waktu yang dikonfigurasi di jalur jaringan Anda. Jika Anda menggunakan Linux, Anda dapat memodifikasi ServerAliveIntervaldan ServerAliveCounternilainya lebih rendah dari standarnya. Nilai ini diatur dalam detik. File konfigurasi seluruh sistem ditemukan (umumnya) di /etc/ssh/ssh_config. Mengatur keduanya DAN TcpKeepAliveseharusnya membantu menjaga koneksi Anda tetap berjalan.


1

Seperti yang dikatakan radius, beberapa firewall keadaan penuh 'lupa' koneksi setelah waktu tertentu (biasanya dapat dikonfigurasi) dan tidak akan memungkinkan komunikasi lebih lanjut untuk koneksi tersebut; mereka mengharapkan koneksi mulai dengan TCP SYN (saya merujuk pada komunikasi SSH Anda di sini).

Ada kemungkinan lain. Jalur jaringan antara rumah dan kantor Anda mungkin mengalami kerugian (dari jenis paket). Saat Anda mencoba mengetik pada klien SSH, jika tautan Anda macet selama beberapa saat, klien mungkin menyerah dan gagal.

Konfigurasi Keepalive pada klien akan menangani kasus pertama di sini tetapi tidak dapat membantu dalam kasus kedua. Firewall biasanya ada di perimeter kantor Anda dan karenanya dapat dikonfigurasi. Itu juga akan membantu pada poin pertama.

Untuk memeriksa apakah Anda mengalami kehilangan tautan yang terputus-putus, Anda dapat tetap mengaktifkan 'ping' di latar belakang dari mesin klien Anda.


0

Anda juga dapat menambahkan pengaturan yang disarankan oleh orang lain sebagai default di ~/.ssh/configfile Anda , jadi Anda tidak harus meneruskannya ke sshsetiap kali Anda memulai koneksi:

nano ~/.ssh/config dan tambahkan:

TCPKeepAlive=no
ServerAliveInterval=15
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.