Ben buldum bu sor , ama üzgünüm kabul edilen yanıtta belirtilen
ServerAliveInterval ve
ClientAliveInterval değişkenlerinin ayarlarını tam olarak anlamıyorum. Yerel sunucum zaman aşımına uğradıysa, bu değeri sıfıra ayarlamam gerekir mi? O zaman asla zaman aşımına uğramayacak mı? Bunun yerine 300 saniyeye mi ayarlamalıyım?
Sorum şu: Dizüstü bilgisayarımı askıya aldığımda ve ardından
Write failed: Broken pipe ve bazıları değil. Yerel bir sshd'yi kırık bir boru ile başarısız olmayacak şekilde nasıl doğru şekilde yapılandırabilirim?
ServerAliveInterval : istemcisinin sunucuya boş bir paket göndermeden önce bekleyeceği saniye sayısı (bağlantıyı canlı tutmak için) .
ClientAliveInterval : sunucusunun istemciye boş bir paket göndermeden önce bekleyeceği saniye sayısı (bağlantıyı canlı tutmak için) .
0 (varsayılan) değerinin ayarlanması bu özellikleri devre dışı bırakır, böylece bağlantınız çok uzun süre boşta kalırsa düşebilir.
ServerAliveInterval, bir bağlantıyı canlı tutmak için en yaygın strateji gibi görünüyor. Bozuk boru sorununu önlemek için, .ssh/config dosyamda kullandığım ssh config:
Host myhostshortcut HostName myhost.com User barthelemy ServerAliveInterval 60 ServerAliveCountMax 10
Yukarıdaki ayar aşağıdaki şekilde çalışacaktır,
Sunucu tarafındaki ClientAliveCountMax da yardımcı olabilir. Bu, bir müşterinin bağlantısının kesilmesinden önce ne kadar süre yanıt vermemesine izin verildiğinin sınırıdır. Üç ClientAliveInterval'daki gibi varsayılan değer 3'tür.
Bu
sshd_config manuel (
man sshd_config):
ClientAliveInterval
İstemciden veri alınmazsa, sshd, istemciden yanıt istemek için şifreli kanal üzerinden bir mesaj gönderecek saniye cinsinden bir zaman aşımı aralığı ayarlar. Varsayılan 0, bu iletilerin istemciye gönderilmeyeceğini belirtir. Bu seçenek yalnızca protokol sürüm 2 için geçerlidir.
ClientAliveCountMax
Varsayılan değer 3'tür.
ClientAliveInterval(aşağıya bakın) 15 olarak ayarlanmışsa ve
ClientAliveCountMaxvarsayılan olarak bırakılmışsa, yanıt vermeyen SSH istemcilerinin yaklaşık 45 saniye sonra bağlantısı kesilir. Bu seçenek yalnızca protokol sürüm 2 için geçerlidir.
İstemci seçenekleri için
man ssh_config:
ServerAliveInterval
Sunucudan veri alınmazsa,
ssh'nin sunucudan yanıt istemek için şifreli kanal üzerinden bir mesaj göndereceği saniye cinsinden zaman aşımı aralığını ayarlar. Varsayılan 0, bu iletilerin sunucuya gönderilmeyeceğini belirtir. Bu seçenek yalnızca protokol sürüm 2 için geçerlidir.
ServerAliveCountMax
Varsayılan değer 3'tür. Örneğin,
ServerAliveInterval15 olarak ayarlanırsa ve
ServerAliveCountMaxvarsayılan olarak bırakılırsa, sunucu yanıt vermezse
sshyaklaşık olarak kesildikten sonra 45 saniye. Bu seçenek yalnızca protokol sürüm 2 için geçerlidir.
Yukarıdakilere dayanarak, 0 devre dışı olduğu anlamına gelir. Bu nedenle bu değerleri Kırık boru hatadan kaçınacak kadar yüksek ayarlamanız gerekir.
Barthelemy'den gelen cevap havalı ama problemin köküne inmiyor. Makinenizi askıya alırsınız ve bilgisayarınızı başlatırken SSH oturumunun hala canlı olmasını istersiniz.
Ssh için bağlantıyı böyle canlı tutacak böyle bir yapılandırma yoktur. SSH TCP kullanır, bir başlangıç için üç yollu el sıkışmasına ihtiyacınız vardır ve daha sonra boş bir süre sonra hayatta kalırsınız. Kapattığınızda/hazırda beklettiğinizde TCP bağlantılarınız FIN ile kapatılır.
Kirli bir geçici çözüm için, bağlantıyı korumak için VPS veya ekranlı başka bir çevrimiçi kutu kullanabilirsiniz. Tavsiyem güvenlik nedeniyle bunu yapmayın.
Bir uç ACH'leri alınan paketlere göndermeyi durdurduktan sonra bir SSH bağlantısının (TCP olmak) canlı kalacağını garanti edemeyeceğiniz için, kişisel olarak http://www.harding.motd.ca/autossh/ = neredeyse SSS bağlantılarımı hemen askıya alır almaz yeniden başlatmak için.
GNU Ekran sunucu tarafında kullanılacağından, yeniden ekleme beni daha önce bulunduğum yere götürüyor.
Bağlantıların hala canlı olup olmadığını sürekli olarak kontrol etmesini sağlamak için ekstra bağlantı noktalarını dinlemesini sağlayabilirsiniz, ancak kişisel olarak, devre dışı bırakılmış olanla yeterince iyi çalıştığını ve sadece SSH'nin kendi
ServerAliveInterval/
ServerAliveCountMax'e güvenebildiğini görüyorum.
Başka bir seçenek de UDP kullanan ve uzun süreli bağlantı eksikliğinden sorunsuz bir şekilde iyileşen http://mosh.mit.edu/ .
SSH bağlantınızdan bağımsız olarak çalışmasını istiyorsanız,
Nohup ile komutları da çalıştırabilirsiniz.
örneğin.
$ Nohup tar -xzf some_huge.tar.gz &
&, bence, gerekli değil, ama diğer şeyler yapabilmeniz için işlemi arka planda çalıştırdığı için uygundur.
Nohup'u her zaman biraz zaman alan herhangi bir işlem için kullanırım, böylece herhangi bir nedenle bağlantıyı kaybedersem yeniden başlamam gerekmiyor - elektrik kesintisi (uzak konumumda, açıkça Host'da değil), ağ kesintisi, her neyse.
Uzun süren seansınızı ekranın içine yerleştirin Ayrıntılar için -h ekranına bakın
Bu şekilde ssh kullanarak makineye yeniden bağlanabilir ve ekran oturumuna yeniden bağlayabilirsiniz