Bir süre boşta kalırsa SSH'nin bağlantısının kesilmesi nasıl önlenir


51

Kullanıcı girişi olmadan 30 dakika sonra o makine ile bağlantısı kesilen bir makineye ssh bağlantım var. Ancak, eğer böyle bir şey başlatırsam top, bağlantı canlı kalır. Bu bir müşterinin makinesi olduğundan, bu makinenin SSH sunucusunu yeniden yapılandıramıyorum. Bu yüzden boşluğu otomatik olarak algılamanın ve benzeri bir şeye başlamanın bir yolunu arıyorum top. Bash için bir çeşit "ekran koruyucu".

Bunu yapabildiğimi biliyorum screenama ne yazık ki screenyüklü değil ve yazılımı yükleyemiyorum. Bu yüzden Bash'in sunduğu şeyi kullanmam gerekiyor.

Açıklığa kavuşturmak için: Giriş yaptıktan sonra bir kez başladığım bir çözüm arıyorum ve sonra bu terminali kullanmak, uzaklaşmak, iki saat sonra geri dönmek ve gitmeden önce hiçbir şey yazmadan çalışmaya devam etmek istiyorum. Ayrıca, tünel işlerine bakmıyorum (bunun için harika aracı sshuttle tavsiye ediyorum )

Herhangi bir fikir?


Ekranı temizlemek için kısa bir not ve Keepalive aynı şey değildir: örneğin, ssh istemcisi veya sunucu bağlantısının bağlantısı kesilmişse, ssh oturumunuz KeepAlive açık olsa bile, bir ekran kabuğu sonlandırılmayacakken sonlandırılacak .
MariusMatutiae

Yanıtlar:


78

Açıklığa kavuşturmak için: Giriş yaptıktan sonra bir kez başladığım bir çözüm arıyorum ve sonra bu terminali kullanmak, uzaklaşmak, iki saat sonra geri dönmek ve gitmeden önce hiçbir şey yazmadan çalışmaya devam etmek istiyorum.

Sorun, boşta oturumları bırakan bir şey (genellikle bir güvenlik duvarı veya yük dengeleyici) olmasıdır. Oturum korumalarını yapılandırırsanız, koruma işlemleri, ağ cihazlarının oturumu boşta olarak görmesini önler.

Linux / Unix / Cygwin OpenSSH düzeltmesi :
En basit düzeltme, ssh istemcisi düzenlemelerini etkinleştirmek; bu örnek her 60 saniyede bir ssh keepalive gönderir:

ssh -o "ServerAliveInterval 60" <SERVER_ADDRESS>

Bunu tüm oturumlarınızda etkinleştirmek istiyorsanız, şunu /etc/ssh/ssh_configveya içine koyun ~/.ssh/config:

ServerAliveInterval 60

Daha fazla bilgi için man sayfasına bakınssh_config

Macun Düzeltme :

Bunu PuTTY "Varsayılan Ayarlar" a kaydedin ...

  • Bağlantıya tıklayın
  • 60 yazısını "Keepialives arasında Saniye"

putty_screenshot


21

Mike Pennigton'ın cevabına ek olarak , ben de sizi haberdar etmek istiyorum ServerAliveCountMax.

  • Bu ServerAliveInterval, her x saniyede bir sürekli gönderir (varsayılan, 0 , başka bir şeye ayarlanmadıysa bu özelliği devre dışı bırakır).
  • ServerAliveCountMaxCevap alınmazsa bu kez yapılır . Varsayılan değeri ServerAliveCountMaxolan 3 (bkz manpage ssh_config ).

Örnek: 60'a ayarlayıp ServerAliveIntervalolduğu gibi bırakın , bunun anlamı, bekleticinin bırakmadan önce sadece 3 dakika bekleyeceği anlamına gelir .ServerAliveCountMax3 * 60 = 180 seconds =

Bunu, bağlantıyı canlı tutmaya çalışmak gibi 2 saatlik bir süreye yükseltmek için şunları yapabilirsiniz:

Komuta başına:

Bu yüzden ayarlamayı düşünmelisiniz

ssh -o "ServerAliveInterval 60" -o "ServerAliveCountMax 120" <SERVER_ADDRESS>

Kalici:

Kalıcı kılmak için /etc/ssh/ssh_config(sistem genelinde ~/.ssh/configgeçerli olacak ) veya (yalnızca kullanıcı için geçerli olacak şekilde ) yazınız :

ServerAliveInterval 60
ServerAliveCountMax 120

Not

Dislick, doğru şekilde belirtildiği gibi , durumunuza bağlı olarak, istediğiniz ne olmayabilir:

  • Sunucu artık yanıt vermediğinde oturumu hızlı bir şekilde sonlandırmak istiyorsanız, bunun için düşük bir değer seçmelisiniz ServerAliveCountMax.
  • (Eğer trenle gidip bir yüksek gecikme var mesela) daha önceden kurulmuş bir bağlantı tutarak ilgilenen varsa için, daha yüksek bir değere seçmeliyim ServerAliveCountMaxizin sshbağlantıyı yeniden kurmak için denemeye devam.

Ayrıca bakınız:


1
Üzgünüm, ama bu yanlış. ServerAliveCountMaxSunucudan geri herhangi bir mesaj alınmadan gönderilebilecek canlı sunucuların miktarını belirtir . İsterseniz sshdonuyor sonra (böylece yeniden başlatabilirsiniz o) çıkmak için aslında belirlesin ServerAliveCountMaxa düşük sayı. OP bağlantılı man sayfasına bakınız .
Mar’ı

@dislick Bu konuda biraz düşünmek zorunda kaldım ama içeriğe bağlı olarak haklı olduğunuzu düşünüyorum, bu yüzden bağlamı vurgulamak için bir not ekledim.
Murmel

2

Mobaxterm kullanıyorum ve bu problemle de karşılaştım. Mobaxterm ayrıca müşteri boştayken müşteriyi hayatta tutma seçeneği ile birlikte gelir. Git Settings -> Configuration -> SSH. Başlıklı bölüm var, SSH settingsseçeneği kontrol edin SSH keepalive. O zaman sorun yok olmalı.

görüntü tanımını buraya girin


"SSH keepalive" ücretsiz sürümde çalışıyor mu ... oturumum bu seçeneği kontrol ettikten sonra bile bağlantım kesiliyor
samshers

Evet çalışıyor. Sorununuzun başka nedenleri de olabilir.
Jdhao
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.