SSH oturumunda Broken pipe mesajı ne anlama geliyor?


103

Bazen SSH oturumum bir Write failed: Broken pipemesajla bağlantıyı keser . Bunun anlamı ne? Ve oturumumu nasıl açık tutabilirim?

Biliyorum screenama aradığım cevap bu değil. Bunun bir sshdyapılandırma seçeneği olduğunu düşünüyorum .

Yanıtlar:


89

Sunucunuz çok uzun süre boşta kalan bağlantıları kapatıyor olabilir. İstemcinizi ( ServerAliveInterval) veya sunucunuzu ( ClientAliveInterval) güncelleyebilirsiniz.

 ServerAliveInterval
         Sets a timeout interval in seconds after which if no data has
         been received from the server, ssh(1) will send a message through
         the encrypted channel to request a response from the server.  The
         default is 0, indicating that these messages will not be sent to
         the server.  This option applies to protocol version 2 only.

 ClientAliveInterval
         Sets a timeout interval in seconds after which if no data has
         been received from the client, sshd(8) will send a message
         through the encrypted channel to request a response from the
         client.  The default is 0, indicating that these messages will
         not be sent to the client.  This option applies to protocol
         version 2 only.

Sunucunuzu güncellemek (ve bilgisayarınızı yeniden başlatmak için sshd)

echo "ClientAliveInterval 60" | sudo tee -a /etc/ssh/sshd_config

Veya müşteri tarafı:

echo "ServerAliveInterval 60" >> ~/.ssh/config 

NB bazen "* AliveInterval" yeterli değil stackoverflow.com/questions/10665267/…
rogerdpack

1
Mac'imde hiç ~/.ssh/configyok, orada yaratmalı mıyım yoksa başka bir yerde mi var?
AGamePlayer

5
@AwQiruiGuo Evet, önce dizini ( ~/.ssh) oluşturmalısınız . Yanimkdir -p ~/.ssh; chmod 700 ~/.ssh; touch ~/.ssh/config
Gert

6

Alternatif bir çözüm kullanmak olacaktır mosh- mobil kabuk . Ssh'ın aksine UDP üzerinden bağlanır ve dolaşım destekler. Oturuma evde başlayabilir, dizüstü bilgisayarınızı askıya alabilir, çalışmaya / arkadaşlarınıza / internetin olduğu her yere götürebilir, dizüstü bilgisayarınızı askıya alabilir ve hiçbir şey olmamış gibi çalışmaya devam edebilirsiniz. Berbat bir internet bağlantınız varsa özellikle faydalıdır: Tuş vuruşlarınız sunucuya erişmezse ve sürekli bağlantıyı yeniden kurmaya çalışırsa anında geri bildirim gösterir.

Kurulum ve kurulum basittir: Şimdi mevcut tüm Linux (artı birkaç Linux dışı) dağıtımına dahil edilmiştir ve oturum başlatma ve kimlik doğrulamasını önceki ssh bağlantısı üzerinden koordine eder. Bu yüzden, eğer sizin aracılığınızla ssh user@serverbağlanabiliyorsanız, sadece çağrı yaparak yosunla bağlanmanız çok muhtemeldir mosh user@server, eğer yosun paketleri her iki ucuna da takılıysa.

Bağlantı arızalarının ana nedeni, sunucuya çalışabilmesi için bir UDP bağlantı noktasından (varsayılan aralık: 60000-61000) ulaşmanızdır. Dolayısıyla, sunucu bir güvenlik duvarının arkasındaysa, kendinize delik açamadığınız takdirde çoğunlukla şansınız kalmaz ( güvenlik uygulamaları ).


3

Daha uzun bir bağlantı süresine sahip olmak istiyorsanız, istemcide şunu ekleyin:

echo 'ServerAliveInterval 30' | sudo tee -a ~/.ssh/config
echo 'ServerAliveCountMax 1200' | sudo tee -a ~/.ssh/config

ServerAliveCountMaxBu, varsayılan olarak 3'e ayarlanmıştır. Bu nedenle ServerAliveInterval, sunucunuza 3 küçük bilgi paketi gönderdikten sonra, otomatik olarak oturumu kapatır. 1200 olarak ayarlamak, bu işlemin en az 1200 kez gerçekleşmesi gerektiği anlamına gelir. Kısacası, en az 30 * 1200 saniye (10 saat) bağlanmanız gerekir.


5
Şu anki kullanıcıya ait olan veya henüz mevcut olmayan bir dosya için neden sudo kullanıyorsunuz?
Hubert Grzeskowiak,

2

Bu genellikle ağ (TCP) bağlantınızın sıfırlandığı anlamına gelir. Örneğin, internet sağlayıcınız sizi veya bunun gibi bir şeyi yeniden bağladı.


1

Aynı sorunu yaşadım ama beklendiği gibi değil. Aynı ağda başka bir sunucunun aynı IP adresi için çalıştığını fark ederseniz, aynı sorunla karşılaşırsınız. Bunu çözmek için aynı IP adresinizi kullanan başka sunucular olup olmadığını kontrol etmeniz gerekir. Bu arpkomut kullanılarak yapılabilir .

Debian kullanıyorum bu yüzden burada başka bir sunucunun gerçekten aynı IP adresini kullanıp kullanmadığını belirlemek için kullandığım komutların bir örneği var.

apt-get install arp-scan
arp-scan -I eth0 -l | grep 192.168.1.42
  192.168.1.42 d4:eb:9a:f2:11:a1 (Unknown)
  192.168.1.42 f4:23:a4:38:b5:76 (Unknown) (DUP: 2)

Aynı IP adresini kullanarak iki grup mac adresi göreceksiniz. Birini başka bir IP adresine ayarlayarak çakışmaları önleyin.


0

"Broken Pipe" mesajının bir başka nedeni de, başka bir makinenin ana makinenizle aynı IP'yi kullanmaya çalışıyor olmasıdır.

Bu IP'yi başka birinin kullanıp kullanmadığını test etmenin basit bir yolu:

  1. Sunucunuzu kapatın
  2. başka bir makinenin bu IP'yi kullanıp kullanmadığını görmek için aynı IP’ye ping atmak

Ağınızda hangi makinelerin bulunduğunu bulmak için, bu Unix ve Linux soru başlığını kullanabilirsiniz: Başka hangi makinelerin yerel ağa bağlı olduğunu bulma .

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.