353 votes

Comment éviter le message "Write Failed : broken pipe" lors d'une connexion SSH ?

Que puis-je faire pour configurer SSH à la fois sur le client et les serveurs pour empêcher Write Failed: broken pipe des erreurs ? Cela se produit souvent si vous mettez votre ordinateur client en veille et que vous le reprenez plus tard.

19voto

Jake Points 291

J'aime absolument Mosh. Il m'arrive fréquemment de me connecter à un serveur, de fermer mon ordinateur portable et d'aller dans un café, de l'ouvrir et de continuer comme si de rien n'était.

Mosh (mobile Shell)

Application de terminal à distance qui permet itinérant , soutient intermittent connectivité et fournit des services intelligents local echo et l'édition en ligne des frappes de l'utilisateur.

Mosh est un remplacement de SSH. Il est plus robuste et plus réactif, surtout sur les liaisons Wi-Fi, cellulaires et longue distance.

Mosh est un logiciel libre, disponible pour GNU/Linux, FreeBSD, Solaris, Mac OS X et Android.

6voto

Nathan Fig Points 3719

Pour moi, j'ai eu Write failed: Broken pipe même lorsque je tapais activement dans vim ou à l'invite Shell. Je ne pouvais pas non plus naviguer sur Internet en local pendant un certain temps. (Je me connectais à distance à Ubuntu en utilisant Terminal).

D'autres personnes de mon réseau diffusent beaucoup de vidéos depuis Netflix et d'autres endroits. Je ne peux pas le prouver, mais je pense que c'est un problème de FAI ou de routeur. Par exemple, Verizon et Netflix s'accusent mutuellement des problèmes de réseau de leurs clients.

Si vous disposez d'une connexion commutée et que vous diffusez de la vidéo ou de la musique en continu avec une connexion SSH ou telnet simultanée, il est inévitable qu'à un moment donné, vous receviez un message de tuyau cassé. La mise à niveau du forfait haut débit de mon fournisseur d'accès à Internet semble avoir réduit la fréquence de mes interruptions de connexion.

6voto

rupert160 Points 171

J'ai posté ma réponse ici, car il ne s'agissait pas d'une VM Ubuntu.

https://unix.stackexchange.com/questions/259225/packet-write-wait-broken-pipe-even-leaving-top-running

ssh -o IPQoS=throughput user@host

3voto

Christopher Biggs Points 211

J'ai un script sur le serveur distant qui ne semble jamais échouer, quelle que soit la configuration SSH client ou serveur.

#!/bin/bash
while true; do date; sleep 10; done;

Enregistrez-le dans un fichier dummy.sh et exécutez-le rapidement avant de réduire la fenêtre ou de vous en éloigner. Il continuera à imprimer l'horodatage actuel sur le serveur et maintiendra votre connexion en vie tant qu'elle ne sera pas interrompue pour une autre raison. Lorsque vous revenez au terminal, appuyez simplement sur CTRL+C et continuez à travailler.

1voto

gaoithe Points 463

Vous pouvez ajouter ces arguments chaque fois que vous invoquez ssh : -o ServerAliveInterval=15 -o ServerAliveCountMax=3

Vous n'avez pas à modifier les fichiers /etc/ssh/*config si vous faites cela.

Vous pouvez créer un alias bash ou une fonction ou un script pour rendre cela facile.

Par exemple, ces fonctions bash, que vous pouvez ajouter dans votre .bashrc, do_ssh est utilisé manuellement pour activer les keepalives. do_ssh_pty est utilisé dans scripts pour définir pty et éviter les invites.

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

Maintenant do_ssh user@host peut être utilisé ou do_ssh user@host <args> <command> et les keepalives seront actifs.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X