SSH : Write Failed: broken pipe

Article publié, le et modifié le
2 minute(s) de lecture

Cet article contient 357 mots.
Source brute de l'article : MD

Description

Ahhh, les joies de SSH, n’est-ce pas ?!

  • Ce matin, vous vous levez, vous cherchez à vous connecter à votre serveur… et très rapidement, vous vous faites déconnecter avec ce, pas joli du tout, message : Write Failed: broken pipe.
    Vous vous reconnectez, et rebelote !!!

Informations

Il y a plusieurs raisons possibles à ce genre de déconnexions intempestives, et fortement désagréables, et aucunes de particulières.

Configuration

De fait, il existe trois options SSH à configurer qui permettent d’améliorer sensiblement la tenue de la connexion, dont une TCPKeepAlive yes qui peut être paramétrée côté serveur et côté client !

Côté serveur

Ouvrez votre fichier /etc/ssh/sshd_config, et rajoutez ces deux options :

  • ClientAliveInterval : est le nombre de secondes pendant lequel le serveur va attendre avant d’envoyer un paquet null au client - le but étant de garder la connexion vivante.
  • ClientAliveCountMax : est la limite donnée à un client pendant lequel il est autorisé à ne pas donner de réponse, sans se faire déconnecter - sa valeur par défaut est : 3

Côté client

Ouvrez votre fichier ~/.ssh/config, et ajoutez ces deux options correspondantes :

  • ServerAliveInterval : est le nombre de secondes pendant lequel le client va attendre avant d’envoyer un paquet null au serveur - le but étant toujours de garder vivante la connexion.
  • ServerAliveCountMax : valeur par défaut est de : 3

Explications

Ces options ont pour propos de maintenir la connexion en vie ; le processus est le suivant :

  • Quand le timing relatif aux options ClientAliveInterval et ServerAliveInterval est arrivé à son terme, un signal “<span lang="en">hello-are-you-there</span>” est envoyé…
  • le paramétrage des options ClientAliveCountMax et ServerAliveCountMax est le nombre de fois où ce signal “hello” va être envoyé.
  • S’il n’y a pas de réponse de l’un ou de l’autre au final, la connexion se fermera.

Le calcul est très simple : ClientAliveInterval x ClientAliveCountMax secondes, côté serveur, et réciproquement pour les options “Server”, côté client.

Attention

Cela devrait améliorer la situation, mais ne la résout pas forcément !

Très utile avec l’usage du fameux projet SSLH - le multiplexeur de connexion HTTPS/SS(H|L)/VPN, etc…