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.

gareth_bowles
sumber

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.

Dave Drager
sumber
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?

radius
sumber
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.

sysadmin1138
sumber
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.

nik
sumber
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
Dan Dascalescu
sumber