SSH bağlantısında “Yazma Başarısız: kırık boru” nasıl engellenir?

230

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.

    
sordu sorin 29.04.2012 01:36

9 cevap

211

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 .

    
verilen cevap Aram Kocharyan 26.05.2012 13:49
70

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.

    
verilen cevap eltommo 04.10.2012 18:28
40

İ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:

Bir SSH Yapılandırma Dosyası Kullanma

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.

    
verilen cevap Matt 06.10.2013 04:54
22

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
    
verilen cevap Alexey Sviridov 07.10.2012 20:40
18

İ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?

    
verilen cevap kenorb 02.10.2014 15:52
15

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.

  

Mosh (mobil kabuk)

     

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.

    
verilen cevap Jake 30.09.2014 20:48
4

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

    
verilen cevap Parag Magunia 30.07.2014 15:33
3

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.

    
verilen cevap JulioHM 09.09.2013 18:50
0

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 $*
}

Artık do_ssh [email protected] kullanılabilir veya do_ssh [email protected] <args> <command> ve keepalives aktif olacaktır.

    
verilen cevap gaoithe 12.02.2018 14:05

Etiketlerdeki diğer soruları oku