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.

337voto

DGray Points 11

J'ai essayé de le faire dans /etc/ssh/ssh_config pour Linux et Mac :

Host *
ServerAliveInterval 120

Il s'agit de la fréquence, en secondes, à laquelle il doit envoyer un message keepalive au serveur. Si cela ne fonctionne pas, entraînez un singe à appuyer sur la touche Entrée toutes les deux minutes pendant que vous travaillez.

Vous pouvez définir soit ServerAliveInterval en /etc/ssh/ssh_config de la machine cliente ou ClientAliveInterval en /etc/ssh/sshd_config de la machine serveur. Essayez de réduire l'intervalle si vous obtenez toujours l'erreur.

La configuration pour un seul utilisateur peut être définie dans le fichier ~/.ssh/config tant du côté serveur que du côté client. Assurez-vous que le fichier a les permissions correctes chmod 644 ~/.ssh/config .

108voto

eltommo Points 1864

Les sessions SSH peuvent s'interrompre pour de nombreuses raisons, parfois inévitables.

Un utilitaire utile qui peut être utilisé pour atténuer les problèmes causés par ce phénomène est appelé screen . Screen est un utilitaire puissant qui vous permet de contrôler plusieurs terminaux qui resteront en vie indépendamment de la session ssh. Par exemple, si vous exécutez screen dans une session ssh, vous verrez un nouveau terminal s'ouvrir et vous pourrez l'utiliser pour exécuter des tâches. Supposons que votre session ssh meurt au cours du processus. Exécution de screen -d puis screen -r rouvrira la dernière session et vous pourrez continuer à partir de là. Assurez-vous de lire une partie de la documentation avant de l'utiliser.

61voto

Matt Points 692

Configuration du client

Essayez de créer le fichier :

~/.ssh/config

Ajoutez le contenu :

Host *
  ServerAliveInterval 30
  ServerAliveCountMax 5

Maintenant, connectez-vous à votre serveur et voyez si votre problème est résolu. L'option ClientAliveInterval n'est utile que pour configurer le serveur ssh (aka sshd), elle ne change rien du côté du client ssh, donc ne l'utilisez pas dans le fichier de configuration ci-dessus.

Ceci enverra un signal "hello-are-you-there" au serveur si aucun paquet n'a été reçu dans les 30 secondes précédentes (comme spécifié ci-dessus). Cependant, si le nombre de signaux hello-are-you-there consécutifs atteint ServerAliveCountMax, ssh se déconnectera du serveur. Cette valeur est par défaut de 3 (donc 3*30 = 90 secondes sans activité du serveur), augmentez-la si elle convient à vos besoins. Il y a beaucoup plus d'options de configuration dans le fichier .ssh/config et vous pouvez lire :

Utilisation d'un fichier de configuration SSH

Pour plus d'informations sur les autres options. Il se peut que vous ne souhaitiez pas appliquer cette option à chaque serveur auquel vous vous connectez, comme le fera cet exemple. Vous pouvez aussi le restreindre à un serveur particulier en remplaçant la ligne Host * con Host <IP> (à remplacer par une adresse IP, voir la page de manuel ssh_config).

Configuration du serveur

De même, vous pouvez demander au serveur d'être indulgent avec vos clients. Le fichier de configuration est /etc/ssh/sshd_config .

ClientAliveInterval 20
ClientAliveCountMax 5

Vous pouvez soit le désactiver en mettant ClientAliveInterval a 0 ou de modifier ClientAliveInterval y ClientAliveCountMax pour définir une inactivité maximale du client ssh sans réponse aux sondes. L'un des avantages de ce paramètre par rapport à TCPKeepAlive est que les signaux sont envoyés par le biais de canaux cryptés, et qu'il est donc moins susceptible d'être usurpé.

32voto

dan gibson Points 183

Je suis en train de mettre à jour à distance un serveur Ubuntu de lucid à precise et j'ai perdu la connexion ssh au milieu de la mise à jour avec le message "Write failed. Broken pipe". ClientAliveInterval et ServerAliveInterval n'ont rien fait. La solution est d'activer les options TCPKeepAlive dans le client ssh :

TCPKeepAlive yes

sur

/etc/ssh/ssh_config

J'espère que cela vous aidera

28voto

kenorb Points 8840

Pour le client, modifiez votre ~/.ssh/config (ou /etc/ssh/ssh_config ) comme suit :

Host *
  TCPKeepAlive yes
  ServerAliveInterval 120

TCPKeepAlive - Indique si le système doit envoyer des messages TCP de type "keepalive". à l'autre partie. S'ils sont envoyés, la mort de la connexion ou le crash d'une des machines seront correctement signalés. Cependant, cela signifie que les connexions mourront si la route est temporairement hors service, et certaines personnes trouvent cela ennuyeux (la valeur par défaut est 'yes').

ServerAliveInterval - Définit un intervalle de temps en secondes après lequel après lequel, si aucune donnée n'a été reçue du serveur, ssh(1) enverra un message via le canal crypté pour demander une réponse du serveur. serveur. La valeur par défaut est 0, ce qui indique que ces messages ne seront pas envoyés au serveur. envoyés au serveur.


Pour le serveur, modifiez votre /etc/ssh/sshd_config comme :

ClientAliveInterval 600
ClientAliveCountMax 0

Si vous voulez que le client ssh se termine (timeout) automatiquement après 10 minutes (600 secondes).

ClientAliveCountMax - Ceci indique le nombre total de checkalive envoyés par le serveur ssh sans obtenir de réponse du client ssh. client ssh. La valeur par défaut est 3.

ClientAliveInterval - Ceci indique le délai d'attente en secondes. Après x nombre de secondes, le serveur ssh enverra un message au client en lui demandant réponse. Le délai est de 0 (le serveur n'enverra pas de message au client pour vérifier.).


Voir aussi : Quelles sont les options ServerAliveInterval y ClientAliveInterval dans sshd_config font, précisément ?

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