it-swarm-tr.com

Sshd_config dosyasındaki `ServerAliveInterval` ve` ClientAliveInterval` seçenekleri tam olarak ne yapar?

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?

177
M. Tibbits

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,

  1. İstemci 60 saniye boyunca boşta kalacaktır (ServerAliveInterval süresi) ve sunucuya bir "boş değerli paket" gönderir ve yanıt bekler. Yanıt gelmezse, yukarıdaki işlemi 10 (ServerAliveCountMax) kez (600 saniye) kadar denemeye devam edecektir. Sunucu yine de yanıt vermezse, istemci ssh bağlantısını keser.

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.

227
Barthelemy

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 ClientAliveCountMax varsayı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, ServerAliveInterval 15 olarak ayarlanırsa ve ServerAliveCountMax varsayılan olarak bırakılırsa, sunucu yanıt vermezse ssh yaklaşı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.

29
kenorb

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.

20
3h4x

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/ .

16
grifferz

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.

5
Buttle Butkus

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

1
user180529