Write Failed: broken pipe
Hataları önlemek için hem istemci hem de sunucularda SSH'yi yapılandırmak için ne yapabilirim ? İstemci bilgisayarınızı uyursanız ve daha sonra devam ederseniz, genellikle oluşur.
screen
?
Write Failed: broken pipe
Hataları önlemek için hem istemci hem de sunucularda SSH'yi yapılandırmak için ne yapabilirim ? İstemci bilgisayarınızı uyursanız ve daha sonra devam ederseniz, genellikle oluşur.
screen
?
Yanıtlar:
Bunu /etc/ssh/ssh_config
Linux ve Mac için denedim :
Host *
ServerAliveInterval 120
Bu ne kadar sıklıkla, saniyeler içinde sunucuya sürekli bir mesaj göndermelidir. Bu işe yaramazsa, çalışırken her iki dakikada bir enter tuşuna basın.
Ya ayarlayabilirsiniz ServerAliveInterval
içinde /etc/ssh/ssh_config
istemci makinenin veya ClientAliveInterval
içinde /etc/ssh/sshd_config
sunucu makinenin. Hâlâ hatayı alıyorsanız aralığı azaltmayı deneyin.
Tek bir kullanıcı için konfigürasyon ~/.ssh/config
hem sunucu hem de müşteri tarafında dosyada ayarlanabilir . Dosyanın doğru izinlere sahip olduğundan emin olun chmod 644 ~/.ssh/config
.
Bad configuration option: ClientAliveInterval
Bad configuration option
OSX 10.8.4'te de aynı hatayı alıyorum.
SSH oturumları sayısız ve muhtemelen kaçınılmaz nedenlerden dolayı bozulabilir.
Bunun neden olduğu sorunları azaltmak için kullanılabilecek faydalı bir yardımcı programdır screen
. Ekran, ssh oturumundan bağımsız olarak hayatta kalacak birden fazla terminali kontrol etmenizi sağlayan güçlü bir yardımcı programdır. Örneğin, screen
bir ssh oturumunda çalıştırıyorsanız , yeni bir terminal açıldığını göreceksiniz ve bunu işleri çalıştırmak için kullanabilirsiniz. Ssh oturumunuzun bu sırada öldüğünü söyleyelim. screen -d
Sonra çalışan screen -r
son oturumu yeniden açacak ve oradan devam edebileceksiniz. Kullanmadan önce bazı belgeleri okuduğunuzdan emin olun .
screen -d -r
son oturumunuzu kurtarmak için rahatlıkla koşabilirsiniz .
screen -dr
. Veya screen -x
ne yapmayı planladığınıza bağlı olarak. Mesele şu ki, bir kişi bütün bu anahtarların ne yaptığını bilmeli, böylece uygun olanları kullanabilmeli ve sadece internet kullanıcılarının önerilerini kör biçimde takip etmemelidir. Burada güzel bir küçük özet var: ss64.com/bash/screen.html
Müşteri yapılandırma
Dosyayı oluşturmayı deneyin:
~/.ssh/config
İçeriği ekleyin:
Host *
ServerAliveInterval 30
ServerAliveCountMax 5
Şimdi sunucunuza ssh ve sorunun çözülüp çözülmediğine bakın. ClientAliveInterval seçeneği yalnızca ssh sunucusunu (aka sshd) yapılandırırken kullanışlıdır, ssh istemci tarafında bir şeyi değiştirmez, bu nedenle yukarıdaki yapılandırma dosyasında kullanmayın.
Eğer önceki 30 saniyede hiçbir paket alınmamışsa, sunucuya bir merhaba-oradasınız sinyali gönderir (yukarıda belirtildiği gibi). Bununla birlikte, ardışık merhaba-sen-oradasınız sinyallerinin sayısı ServerAliveCountMax'a ulaşırsa, ssh sunucudan ayrılacaktır. Bu değer varsayılan olarak 3'tür (yani 3 * 30 = 90 saniye sunucu etkinliği olmadan), gereksinimlerinize uygunsa artırın. .Ssh / config dosyasına daha fazla config seçeneği var ve okuyabilirsiniz:
Bir SSH Config Dosyası Kullanma
Diğer seçenekler hakkında daha fazla bilgi için. Bunu, bağlanacağınız her sunucuya uygulamak istemeyebilirsiniz. Ya çizgiyi değiştirerek yalnızca belirli bir sunucuya dizginlemek Host *
ile Host <IP>
(ssh_config man sayfasına bakın, bir IP adresi ile değiştirin).
Sunucu yapılandırması
Benzer şekilde, sunucuya müşterilerinize karşı nazik olmalarını söyleyebilirsiniz. Yapılandırma dosyası /etc/ssh/sshd_config
.
ClientAliveInterval 20
ClientAliveCountMax 5
Sen ayarlayarak devre dışı ya ClientAliveInterval
hiç 0
ya da çimdik ClientAliveInterval
ve ClientAliveCountMax
prob yanıt vermeden maksimum ssh istemci hareketsizlik ayarlayın. Bu ayarların TCPKeepAlive'ye göre bir avantajı, sinyallerin şifreli kanallardan gönderilmesidir, bu nedenle sahtecilik olasılığı daha düşüktür.
Bir Ubuntu sunucusunu uzaktan Lucid'den kesin olarak yükseltiyorum ve yükseltme işleminin ortasında "Yazma başarısız oldu. Brocken borusu" mesajı ile ssh bağlantısını kaybettim. ClientAliveInterval ve ServerAliveInterval hiçbir şey yapmadı. Çözüm, ssh istemcisindeki TCPKeepAlive seçeneklerini açmaktır:
TCPKeepAlive yes
içinde
/etc/ssh/ssh_config
Müşteri için ~/.ssh/config
(veya /etc/ssh/ssh_config
) dosyanızı aşağıdaki gibi düzenleyin :
Host *
TCPKeepAlive yes
ServerAliveInterval 120
TCPKeepAlive - Sistemin TCP korunan mesajları diğer tarafa göndermesi gerekip gerekmediğini belirtir. Gönderilirlerse, bağlantının kesilmesi veya makinelerden birinin çökmesi uygun şekilde fark edilir. Bununla birlikte, rota geçici olarak devre dışı kaldığında bağlantıların kesileceği ve bazılarının can sıkıcı bulduğu anlamına gelir (Varsayılan 'evet').
ServerAliveInterval - Sunucudan veri alınmadıysa, ssh (1), sunucudan bir yanıt istemek için şifreli kanal üzerinden bir mesaj gönderir. Varsayılan değer 0'dır, bu mesajların sunucuya gönderilmeyeceğini belirtir.
Sunucu için, aşağıdakileri düzenleyin /etc/ssh/sshd_config
:
ClientAliveInterval 600
ClientAliveCountMax 0
Eğer ssh istemcisinin 10 dakika sonra (600 saniye) otomatik olarak çıkmasını (zaman aşımı) istiyorsanız.
ClientAliveCountMax - Bu, ssh istemcisinden herhangi bir yanıt almadan ssh sunucusu tarafından gönderilen toplam onay mesajının sayısını gösterir. Varsayılan 3'tür.
ClientAliveInterval - Bu saniye cinsinden zaman aşımını gösterir. X saniyeden sonra, ssh sunucusu müşteriye yanıt isteyen bir mesaj gönderir. Sağırlık 0'dır (sunucu kontrol etmesi için müşteriye mesaj göndermez.).
Ayrıca bakınız: Seçenekler ServerAliveInterval
ve ClientAliveInterval
sshd_config içindeki işlemler tam olarak ne yapar?
Mosh'u kesinlikle seviyorum. Sık sık bir sunucuya ssh, dizüstü bilgisayarımı kapatıp bir kafeye gidiyorum, açıyorum ve sanki hiçbir şey değişmemiş gibi devam ediyorum.
Mosh (mobil kabuk)
Sağlar uzak terminal uygulama dolaşım destekler zaman bağlantı ve akıllı içerir , yerel yankı ve kullanıcı tuş vuruşlarını satır düzenlemeyi.
Mosh, SSH'nin yerine geçti. Özellikle Wi-Fi, hücresel ve uzun mesafeli bağlantılar üzerinden daha sağlam ve duyarlı.
Mosh, GNU / Linux, FreeBSD, Solaris, Mac OS X ve Android için kullanılabilen ücretsiz bir yazılımdır.
Write failed: Broken pipe
Benim için aktif olarak vim yazarken veya kabuk isteminde bile oluyordum . Bir süredir yerel olarak da internette dolaşamadım. (Terminal kullanarak uzaktan Ubuntu'ya bağlanıyordum.)
Ağımdaki diğerleri Netflix ve diğer yerlerdeki bir çok video akışını yayınlar. Bunu kanıtlayamıyorum, ancak bunun bir ISS veya yönlendirici sorunu olduğundan şüpheleniyorum. Örneğin, Verizon ve Netflix, müşterilerin ağ problemleri için birbirlerine parmakları işaret ediyor.
Çevirmeli ağ bağlantınız varsa ve aynı anda SSH veya telnet bağlantısı olan video veya müzik akışı yapıyorsanız, bir noktada kaçınılmaz bir kesinti mesajı alırsınız. ISS'lerimin geniş bant paketini yükseltmek, kopuk bağlantımı daha az sıkıyor gibi görünüyordu.
Bir Ubuntu VM'si olmadığı için cevabımı buraya yazdım.
ssh -o IPQoS=throughput user@host
SSH yapılandırma istemcisi veya sunucusundan bağımsız olarak, uzak sunucuda hiçbir zaman başarısız gözükmeyen bir komut dosyası var.
#!/bin/bash
while true; do date; sleep 10; done;
Bazı dummy.sh dosyalarına kaydedin ve pencereyi simge durumuna küçültmeden veya ondan uzaklaşmadan önce hızlıca çalıştırın. Sunucudaki geçerli zaman damgasını yazdırmaya devam edecek ve bağlantı başka bir nedenden dolayı kesilmediği sürece bağlantınızı canlı tutacaktır. Bu terminale geri döndüğünde, sadece CTRL + C tuşlarına bas ve çalışmaya devam et.
top
çalışan
Bu arshları ssh'yi her çağırışınızda ekleyebilirsiniz: -o ServerAliveInterval=15 -o ServerAliveCountMax=3
Bunu yaparsanız / etc / ssh / * config dosyalarını düzenlemeniz gerekmez.
Bunu kolaylaştırmak için bir bash takma adı veya işlevi veya komut dosyası oluşturabilirsiniz.
Örneğin, bu bash işlevlerini, .bashrc içine ekleyebilirsiniz, do_ssh, sakalları açmak için elle kullanılır. do_ssh_pty komut dosyası içinde pty değerini belirlemek ve istemleri önlemek için kullanılır.
do_ssh() {
ssh -o ServerAliveInterval=15 -o ServerAliveCountMax=3 $*
}
do_ssh_pty() {
ssh -tt -o "BatchMode=yes" -o "StrictHostKeyChecking=no" -o ServerAliveInterval=15 -o ServerAliveCountMax=3 $*
}
Şimdi do_ssh user@host
kullanılabilir veya do_ssh user@host <args> <command>
saklayıcılar aktif olacak.