Bunu pek çok konsolda (Linux, Mac, ...) ve birçok farklı ağda birçok farklı makineyle gördüm. Tam olarak nedenini tam olarak belirleyemem, neden böyle oluyor: Tek yapmanız gereken SSH ile bir makineye giriş yapmak. Bağlantı bir sebepten dolayı koparsa (basitlik için, ağ kablosunun çekildiğini söyleyin), bazen konsol sonsuza kadar askıda kalıyor - diğer zamanlarda, ana kabuğa iyi geliyor.
Bu olduğunda çok sinir bozucu (örneğin, komut geçmişini kaybedersiniz.) Belki bir çıkışı zorlayabilen gizli bir klavye kısayolu var mı (Ctrl-C veya Ctrl-D çalışmıyor)? Ve tüm bu uygulamalarda bu rastgele "hata" nın nedeni nedir?
Bir çıkışı zorlamak için bir "gizli" klavye kısayolu vardır: ~) Donmuş oturumdan, sırayla şu tuşlara basın: Girmek~. Tilde (yalnızca yeni satırdan sonra) ssh istemcisi tarafından bir çıkış sırası olarak kabul edilir ve süre, istemciye işini daha fazla uzatmadan sona erdirmesini söyler.
İletişim sorunları üzerindeki uzun süreli davranış bir hata değil, SSH oturumu diğer tarafın geri geleceğini umarak asılıyor. Ağ kesilirse, bazen birkaç gün sonra bir SSH oturumu geri alabilirsiniz. Tabii ki, özellikle yukarıdaki diziyle pes etmeyi ve ölmeyi söyleyebilirsiniz. Ayrıca, istemcinizde canlı kalma zaman aşımlarını ayarlama gibi yapabileceğiniz çeşitli şeyler vardır, böylece belirli bir süre boyunca etkin bir bağlantısı yoksa kendi başına kapanır, ancak varsayılan davranış mümkün olduğunca bağlı!
Düzenle: Bu kesme anahtarının başka bir kullanışlı uygulaması, yerel ssh istemcisinin dikkatini çekmek ve bir dakika boyunca yerel kabuğunuza geri dönmek için arka plan - bir şey elde etmek için tarihinizden bir şey elde etmek ve daha sonra uzaktan çalışmaya devam etmesini sağlamaktır. Girmek~ Ctrl+Z ssh istemcisini yerel kabuğunuzun arka plan iş kuyruğuna göndermek için
fg geri almak için normal olarak.
Düzenle: Yuvalanmış SSH oturumları ile uğraşırken, zincirdeki SSH oturumlarından yalnızca birini çıkarmak için başka tilde karakterleri ekleyebilir, ancak diğerlerini de tutabilirsiniz. Örneğin, 3 seviyede yuvalanmışsanız (yani, yerel -> Makine1 -> Makine2-> Makine3) Girmek~. yerel oturumunuza geri dönecek, Girmek~~. seni Machine1'de bırakacak ve Girmek~~~. seni Machine2'de bırakacak. Bu, ssh oturumunu geçici olarak arka plana taşımak gibi diğer çıkış sıraları için de çalışır. Yukarıdakiler, daha fazla tilde ekleyerek, herhangi bir yuvalanma seviyesi için çalışır.
Sonunda, kullanabilirsiniz Girmek~? Mevcut kaçış komutlarının yardım menüsünü yazdırmak için
TL; DR - desteklenen çıkış komutları
Desteklenen kaçış dizileri:
~. - terminate connection (and any multiplexed sessions)
~B - send a BREAK to the remote system
~C - open a command line
~R - request rekey
~V/v - decrease/increase verbosity (LogLevel)
~^Z - suspend ssh
~# - list forwarded connections
~& - background ssh (when waiting for connections to terminate)
~? - this message
~~ - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)
SSH hayatta kalmak için bir imkan sunuyor. Aşağıdakileri yerel bölgenize ekleyin
~/.ssh/config (var olmuyorsa oluştur):
ServerAliveInterval 15
ServerAliveCount 3
Bu ayar, güvenli tünelden her 15 saniyede bir bekletme sinyali gönderir. Üç ardışık başarısızlıktan sonra SSH müşterisi çıkacak.
Bazı sistemlerde bunun yerine olması gerektiğini unutmayın:
ServerAliveInterval 15
ServerAliveCountMax 3
Bu cevaptan ask.ubuntu'da alınan: https://askubuntu.com/a/29967/30266
Bu askıda kalması, SSH değil, TCP'nin bir işlevidir. Uygulama, TCP bağlantısının / bağlantısının, TCP'nin bağlantıyı artık yapmadığı bağlantıyı kullanarak uygulamayı bildirmediği sürece kesildiğini bilmenin bir yolu yoktur. Her bir ana bilgisayarın perspektifinden, TCP oturumu hala yerleşik durumdadır ve uzun bir boşta (veri akışı yok) oturumu bir RST dışında veya TCP bekletme paketine yanıt eksikliğinden başka geçerli değildir. evrensel olarak uygulanmamıştır). Bu bana SSH'de bir hata gibi görünmüyor, bu davranışı beklerdim.
Bağlantı düzgün bir şekilde kurulursa, herhangi bir sihirli tuş vuruşu, tuşa basmadan önce bağlantı zaten askıda olduğundan geçmez. İstemcinin sona erdirileceğini söyleyebilirsiniz, ancak bu, sunucuda tutulan (veya devam etmeyen) geçmişi etkilemez.
Bu aslında soruyu yanıtlamıyor olsa da bağlantıyı asmanın etkilerini azaltmaya yardımcı olabilir: uzaktan çalıştığımda (ve genellikle olmadığım zamanlarda)
screen (ile veya olmadan
byobu herhangi bir bağlantı kopması varsa, tüm geçmişiyle birlikte oturumum korunur ve yeniden bağlandığımda bıraktığım durumda kullanılabilir.