Bagaimana cara menghentikan ssh (via cygwin) dari menggantung di server putuskan / batas waktu

2

Skenario:

ssh user@host
# good connection, do some work...
# stop working, the server has some function where it automatically disconnects ...
# I come back to my cygwin window and it is unresponsive to ctrl + c/z and finally after maybe 2-5 minutes it comes back with the following error message:
Write failed: Connection reset by peer
MyLocalUsername@MyLocalComputer ~
$
# Now I can resume my cygwin session and reconnect.

Masalah saya: saya tidak suka bagaimana cygwin hang. Saya tidak ingin memaksakan menutupnya dan saya tidak terlalu menemukan harus membuka jendela lain (titik menggunakan cygwin bagi saya adalah untuk tetap pada keyboard dan tidak kehilangan produktivitas dengan kembali ke windows. Singkatnya, saya akan agak ctrl + c untuk bekerja atau agar tidak menggantung sama sekali.

Zombie
sumber

Jawaban:

2

Ini berfungsi untuk saya di Cygwin64 di Windows 8:

1) Inisiasi koneksi SSH dengan -e "~" untuk mengatur karakter escape sebagai tilde. Itu seharusnya menjadi default escape char, tapi itu tidak bekerja untuk saya sampai saya menggunakan opsi -e. Tampaknya Anda juga dapat mengatur EscapeChar ~arahan di SSH Config Anda.

2) Ketika sesi SSH Anda menjadi tidak responsif, tekan Enter, ~, .. Anda mungkin atau mungkin tidak perlu menekan tilde dua kali untuk benar-benar mengirimkannya. Saya membaca di banyak tempat bahwa itu perlu, tetapi itu berfungsi untuk saya menekan sekali saja.

Jawaban ini didasarkan pada yang ini dan komentarnya: https://superuser.com/a/98565/10167

Rafael Almeida
sumber
0

Anda dapat menambahkan opsi ke perintah ssh Anda, coba ini:

ssh -o ServerAliveInterval = 30 nama pengguna @ host

Ini seharusnya mencegah Anda memutuskan sambungan dari host.

popielasty
sumber
0

Berikut ini solusi untuk serangkaian kasus terbatas: Jika fungsi yang memutuskan hubungan adalah sesuatu yang dapat diprediksi yang Anda panggil secara eksplisit, dan Anda hanya ingin keluar dengan bersih setelah memohonnya, dan jika Anda tahu perintah ini akan membutuhkan waktu lebih dari satu detik untuk menyebabkan terputusnya sambungan , Anda dapat menggunakan nohup, sleepdan panggilan paralel ke exit. Misalnya, jika perintah Anda dijamin membutuhkan waktu lebih dari satu detik untuk menyebabkan terputusnya sambungan, Anda dapat menjalankannya seperti ini:

nohup <slowcommand> & (sleep 1 && exit)

Ini menjamin:

  • slowcommandakan mulai berjalan sebelum exitdipanggil
  • shell akan keluar sebelum slowcommandmenyebabkan pemutusan (jika slowcommanddibutuhkan lebih dari satu detik untuk menyebabkan pemutusan)
  • slowcommand tidak akan diakhiri oleh panggilan ke exit
Keith Russell
sumber