Write Failed: broken pipe hatalarını önlemek için SSH'yi hem istemci hem de sunucular üzerinde yapılandırmak için ne yapabilirim? Genellikle istemci bilgisayarınızı uyku ve daha sonra devam ederseniz oluşur.
Write Failed: broken pipe hatalarını önlemek için SSH'yi hem istemci hem de sunucular üzerinde yapılandırmak için ne yapabilirim? Genellikle istemci bilgisayarınızı uyku ve daha sonra devam ederseniz oluşur.
Bunu Linux ve Mac için
/etc/ssh/ssh_config 'de denedim:
Host * ServerAliveInterval 120
Bu, saniyeler içinde, sunucuya nasıl kalıcı bir mesaj göndermesi gerektiği. Eğer bu işe yaramazsa, çalışırken her iki dakikada bir girmek için bir maymunu eğitin.
İstemci makinenin
ServerAliveInterval 'sinde
/etc/ssh/ssh_config veya sunucu makinesinin
ClientAliveInterval ' sinde
/etc/ssh/sshd_config değerini ayarlayabilirsiniz. Hala hatayı alıyorsanız aralığı azaltmayı deneyin.
Tek bir kullanıcı için yapılandırma, hem sunucuda hem de istemci tarafında
~/.ssh/config dosyasında ayarlanabilir. Dosyanın doğru izinlere sahip olduğundan emin olun
chmod 644 ~/.ssh/config .
SSH oturumları sayısız ve muhtemelen kaçınılmaz nedenlerden dolayı kırılabilir.
Bunun neden olduğu sorunları azaltmak için kullanılabilecek yararlı bir yardımcı programa
screen denir. Ekran, ssh oturumundan bağımsız olarak hayatta kalabilecek çoklu terminalleri kontrol etmenizi sağlayan güçlü bir yardımcı programdır. Örneğin, bir ssh oturumunda
screen çalıştırırsanız, yeni bir terminal açık göreceksiniz ve bunu çalıştırmak için bunu kullanabilirsiniz. Ssh oturumunun süreçte öldüğünü söyleyelim. % Co_de% çalıştırdıktan sonra
screen -d , son oturumu yeniden açar ve oradan devam edebilirsiniz. Kullanmadan önce bazı dokümanları okuduğunuzdan emin olun.
İstemci yapılandırması
Dosya oluşturmayı deneyin:
~/.ssh/config
İçerikleri ekleyin:
Host * ServerAliveInterval 30 ServerAliveCountMax 5
Artık sunucunuza ssh ve sorununun çözülüp çözülmediğine bakın. ClientAliveInterval seçeneği yalnızca ssh sunucusunu (sshd) yapılandırırken kullanışlıdır, ssh istemci tarafında bir şey değiştirmez, bu nedenle yukarıdaki yapılandırma dosyasında kullanmayın.
Bu, önceki 30 saniyede herhangi bir paket alınmamışsa (yukarıda belirtildiği gibi) sunucuya merhaba diyebilirsin. Bununla birlikte, ardışık merhaba diyen sinyallerin sayısı ServerAliveCountMax'a ulaşırsa, ssh sunucunun bağlantısını kesecektir. Bu değer 3 (yani 3 * 30 = 90 saniye boyunca sunucu aktivitesi olmadan) varsayılan değerdir, ihtiyaçlarınızı karşılarsa artırın. .Ssh / config dosyasına çok daha fazla yapılandırma seçeneği vardır ve şunları okuyabilirsiniz:
Diğer seçenekler hakkında daha fazla bilgi için. Bunu, bu örneğin alacağınız her sunucuya uygulamak istemeyebilirsiniz. Ya da
Host * satırını
Host <IP> ile değiştirerek (bir IP adresiyle değiştirin, ssh_config man sayfasına bakın) sadece belirli bir sunucuya koyun.
Sunucu yapılandırması
Benzer şekilde sunucunun müşterilerinizle yumuşak olmasını sağlayabilirsiniz. Yapılandırma dosyası
/etc/ssh/sshd_config .
ClientAliveInterval 20 ClientAliveCountMax 5
Proseslere yanıt vermeden maksimum% s_sh istemcisi etkinliğini ayarlamak için
ClientAliveInterval değerini
0 veya
ClientAliveInterval ve
ClientAliveCountMax ayarlayarak devre dışı bırakabilirsiniz. TCPKeepAlive üzerinden bu ayarların bir avantajı, sinyallerin şifrelenmiş kanallardan gönderilmesidir, bu yüzden, sahte olmama olasılığı daha düşüktür.
Ubuntu sunucusunu uzaktan sıfırdan zora yükseltiyorum ve "Yazma başarısız. Brocken borusu" mesajıyla yükseltme işleminin ortasında ssh bağlantısını kaybettim. ClientAliveInterval ve ServerAliveInterval hiçbir şey yapmadı. Çözüm, istemcideki TCPKeepAlive seçeneklerini açmaktır:
TCPKeepAlive yes
/etc/ssh/ssh_config
İstemci 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 keepalive göndermesi gerekip gerekmediğini belirtir diğer tarafa mesajlar. Gönderildiyse, bağlantının ölümü veya makinelerin birinin çarpması doğru şekilde fark edilecektir. Ancak, Bu, rotanın geçici olarak bitmesi durumunda bağlantıların öleceği anlamına gelir. ve bazı insanlar bunu rahatsız edici buluyor (Varsayılan 'evet').
ServerAliveInterval - Zaman aşımı süresini saniye cinsinden ayarlar. sunucudan veri alınmadıysa, ssh (1) bir bir yanıt istemek için şifrelenmiş kanal üzerinden mesaj sunucusu. Bu mesajların olmayacağını belirten varsayılan 0'dır. sunucuya gönderildi.
Sunucu için
/etc/ssh/sshd_config dosyanızı aşağıdaki gibi düzenleyin:
ClientAliveInterval 600 ClientAliveCountMax 0
Eğer ssh istemcisinin 10 dakika sonra (600 saniye) otomatik olarak çıkmasını (zaman aşımını) istiyorsanız.
ClientAliveCountMax - Bu, toplam kontrol sayısını gösterir. ssh sunucusundan herhangi bir yanıt almadan ssh istemcisi. Varsayılan 3.
ClientAliveInterval - Bu, saniye cinsinden zaman aşımını gösterir. X sonra saniye sayısı, ssh sunucu soran istemciye bir mesaj gönderecek cevap için Sağır 0 (sunucu istemciye mesaj göndermez kontrol edin.).
Ayrıca bkz: Seçenekler nelerdir? sshd_config dosyasındaki
ServerAliveInterval ve
ClientAliveInterval , tam olarak?
Mosh'u kesinlikle seviyorum. Sık sık bir sunucuya bağlarım, dizüstü bilgisayarımı kapatıp bir kafeye git, aç ve hiçbir şey değişmemiş gibi devam et.
dolaşım sağlayan uzak uçbirim uygulaması aralıklı bağlantı , ve akıllı yerel sağlar echo ve kullanıcı tuş vuruşlarının satır düzenlemesi.
Mosh, SSH'nin yerini aldı. Daha sağlam ve duyarlı. özellikle Wi-Fi, hücresel ve uzun mesafeli bağlantılar.
Mosh, GNU / Linux, FreeBSD, Solaris, Mac OS X ve Android için kullanılabilen ücretsiz bir yazılımdır.
Ben aktif olarak vim veya kabuk komut satırında yazarken bile
Write failed: Broken pipe alıyordum. İnternette ya da bir süreliğine internette gezemedim. (Terminali kullanarak Ubuntu'ya uzaktan bağlanıyordum.)
Ağımdaki diğerleri, Netflix ve diğer yerlerden çok video akışı sağlıyor. Bunu kanıtlayamıyorum, ancak bir ISP veya yönlendirici sorunundan şüpheleniyorum. Örneğin Verizon ve Netflix, müşterilerinin ağ sorunları için parmaklarını birbirine işaret ediyor.
Bir çevirmeli bağlantınız varsa ve eşzamanlı bir SSH veya telnet bağlantısıyla video veya müzik yayını yapıyorsanız, bir noktada kırık bir boru mesajı almanız kaçınılmazdır. ISP'ler geniş bant paketimi yükseltmek, bozuk bağlantımın daha az sıklıkta görünmesini sağladı.
Uzak sunucuda, SSH yapılandırma istemcisinden veya sunucusundan bağımsız olarak hiçbir zaman başarısız gibi görünen bir komut dosyası var.
#!/bin/bash while true; do date; sleep 10; done;
Bazı dummy.sh dosyasına kaydedin ve pencereyi küçültmeden veya ondan uzaklaşmadan önce hızlı bir şekilde çalıştırın. Geçerli zaman damgasını sunucuda basmaya devam edecek ve bağlantı başka bir nedenden dolayı düşmediği sürece bağlantınızı canlı tutacaktır. Bu terminale geri döndüğünüzde, CTRL + C'ye basıp çalışmaya devam edin.
Ssh'ı her çağırdığınızda bu arjları 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şlev veya komut dosyası oluşturabilirsiniz.
Örn. Bu bash işlevleri, sizin .bashrc ekleyebilir, do_ssh sakatatları açmak için el ile kullanılır. do_ssh_pty, komut dosyaları içinde pty ayarlamak ve komut istemlerini ö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 $* }