Ssh bağlantısı zaman aşımından ve GNOME Terminalinin donmasından kaçınmanın yolu


235

Ssh üzerinden belirli sunuculara bağlandığımda, terminali zaman aşımına uğratıyor ve “donduruyor” (giriş kabul etmiyor, bağlantıyı kesmiyor, ssh işlemini veya herhangi bir şeyi öldürmek için Ctrl-C olamaz).

Bu, Ubuntu’nun gnome-terminalterminal giriş / çıkışını duraklatıyor gibi görünmesine rağmen GNOME Terminal yazılımının kendi çalışmasını etkilemiyor. Yani gnome-terminalssh ile can sıkıcı bir tutarsızlık daha az bir hata .

Öyleyse, terminalin zaman aşımına uğramış ssh bağlantılarından korunmasını / kazanılmasını sağlamanın bir yolu var mı?


Yanıtlar:


256

sshd (sunucu) bir süre istemciden bir şey duymazsa bağlantıyı kapatır. Müşterinize arada bir sunucuya bir yaşam sinyali göndermesini söyleyebilirsiniz.

Bunun için yapılandırma dosyada ~/.ssh/config. Sinyali dört dakikada bir remotehost'a göndermek için, aşağıdakini içine koyun ~/.ssh/config.

Host remotehost
  HostName remotehost.com
  ServerAliveInterval 240

İçimdeki şey bu ~/.ssh/config.

Tüm ana bilgisayar kullanımında etkinleştirmek için:

Host *
  ServerAliveInterval 240

Ayrıca çalıştırıldığından emin olun chmod 600 ~/.ssh/config, çünkü config dosyası dünya tarafından okunabilir olmamalıdır.


1
İfadede bana yardım ettiğin için teşekkür ederim, çok beğendim. "Değiştirmemeliydim" değiştirmemeliydim "değiştirmemeliyim çünkü ssh dosyanın izinlerini kontrol ediyor ve eğer okunabilir bir dünya veya grup ise başarısız.
Ludwig Weinzierl

1
OP'nin sorduğu şey bu değildi. Hareketsizlik nedeniyle atılmıyor. Bağlanmaya çalışıyor ve terminali donuyor.
Cerin

Burası neresi ~/.ssh/config?
Kullanıcı

1
@ Kullanıcı '~ /' ana klasörünüzü temsil eder. '.ssh', ana klasörünüzdeki bir klasördür.
wkm

6
bağlantın gerçekten kayboluyorsa bu işe yaramaz ...
so12311 19

248

Basın Enter, ~, .birbiri ardına donmuş bir oturumdan kesmek için.

Ssh man sayfasındaki "ESCAPE CHARACTERS" bölümü altta yatan detayları açıklar.


40
Bu cevap bana soruyu daha doğru cevaplamak için geliyor ve her durumda aradığım cevaptı.
CoatedMoose

Eğer satırın başındaki gerektiğini unutmayın EscapeChar ~içinde /etc/ssh/ssh_config(veya ~/.ssh/ssh_configisterseniz).
Aditya MP,

@adityamenon Hayır, EscapeChar ~zaten yerleşik varsayılandır.
Peter Eisentraut

2
@Mark sorusu "terminalin zaman aşımına uğramış ssh bağlantılarından yeniden kazanılmasını önlemenin bir yolu var mı?" Vurgu madeni.
CoatedMoose

2
Soru bağlamında yanlış olmasına rağmen istediğim tam olarak buydu.
Subin Sebastian,

38

Tho bile bu, sorunuza doğrudan bir cevap olmasa da, sahip olduğunuz problemle yakından ilgilidir. Bunun yerine (Tüm bağlantıların sonunda) die gibi terminal işlem çoklayıcı kullanabilirsiniz canlı bağlantı tutmaya çalışmakla screenve tmuxsenin terminali bağlantısının kesilmesi bile arka planda canlı oturumu tutun.

Temel olarak, SSH sunucusunda oturum açtığınızda hemen çalıştırırsınız screen; bu da yeni bir oturum oluşturur ve ekler:

$ screen

Sonra devam edin ve normalde yaptığınız gibi işinizi kabukla yapın. Şimdi bağlantı koparsa, tekrar çevrimiçi olabilir ve SSH üzerinden sunucuya yeniden bağlanabiliyorsanız, geçerli oturumların bir listesini alırsınız:

$ screen -ls

Bir oturuma yeniden eklemek için:

$ screen -r <session>

<session>PID veya oturum adı nerede . Oturumunuza tekrar bağlanacaksınız ve kaldığınız yerden devam edebilirsiniz!

Hatta oturumu ayırabilir ve kaldığınız yerden devam etmek için evden yeniden bağlanabilirsiniz. Kullandığınız oturumu ayırmak için C-aönce C-d(thats Control + Ave sonra Control + D) tuşunu kullanın .

Orada basit online eğitim de.

Uzak sunucuları kullanmak screenve kullanmak en iyi yöntemtmux olarak kabul edilir ve şiddetle tavsiye edilir . Bazı insanlar varsayılan giriş kabuğuna sahip oldukları kadar ileri giderler , bu yüzden bağlandıklarında hemen yeni bir oturum başlatırlar .screenscreen


2
başka bir alternatif mosh kullanmaktır: mosh.mit.edu
Zombies

Bu özellikle zaman zaman bırakılan bir sıcak nokta veya wifi kullanıyorsanız kullanışlıdır.
Randall

11

-o ServerAliveInterval=30Bağlantı dizginize eklemeyi deneyin ( 3030 saniye ve elbette ayarlanabilir)



1

İlk etapta müşterinin zaman aşımına uğramasını engellemek isteyenler için.

ConnectTimeout 0Yapılandırma dosyasında ayarlamayı deneyebilirsiniz . 0 değeri, bağlantının kapalı olmadığı sürece Süresiz olarak canlı tutulacağı anlamına gelir.

config (veya ssh_config) dosyanız şöyle görünebilir:

Host *
   ConnectTimeout 0
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.