web-dev-qa-db-fra.com

Que signifie le message de canal cassé dans une session SSH?

Parfois, ma session SSH se déconnecte avec un Write failed: Broken pipe message. Qu'est-ce que ça veut dire? Et comment puis-je garder ma session ouverte?

Je connais screen, mais ce n'est pas la réponse que je cherche. Je pense que c'est une option de configuration sshd.

107
Peter Stuifzand

Il est possible que votre serveur ferme les connexions inactives depuis trop longtemps. Vous pouvez mettre à jour votre client (ServerAliveInterval) ou votre serveur (ClientAliveInterval)

 ServerAliveInterval
         Sets a timeout interval in seconds after which if no data has
         been received from the server, ssh(1) will send a message through
         the encrypted channel to request a response from the server.  The
         default is 0, indicating that these messages will not be sent to
         the server.  This option applies to protocol version 2 only.

 ClientAliveInterval
         Sets a timeout interval in seconds after which if no data has
         been received from the client, sshd(8) will send a message
         through the encrypted channel to request a response from the
         client.  The default is 0, indicating that these messages will
         not be sent to the client.  This option applies to protocol
         version 2 only.

Pour mettre à jour votre serveur (et redémarrer votre sshd)

echo "ClientAliveInterval 60" | Sudo tee -a /etc/ssh/sshd_config

Ou côté client:

echo "ServerAliveInterval 60" >> ~/.ssh/config 
92
Gert

Une solution alternative consisterait à utiliser mosh - le Shell mobile . Contrairement à ssh, il se connecte via UDP et prend en charge l'itinérance. Vous pouvez commencer votre session à la maison, suspendre votre ordinateur portable, l'emmener au travail/amis/partout où vous avez Internet, suspendre votre ordinateur portable et continuer à travailler comme si de rien n'était. Il est particulièrement utile si vous êtes sur une mauvaise connexion Internet: il affiche un retour instantané si vos frappes ne parviennent pas au serveur et essaie continuellement de rétablir la connexion.

L'installation et la configuration sont simples: il est désormais inclus dans toutes les distributions Linux actuelles (plus quelques distributions non Linux) et il coordonne l'initialisation et l'authentification de la session via une connexion ssh préalable. Donc, si vous pouvez vous connecter via ssh user@server il est très probable que vous puissiez vous connecter avec mosh simplement en appelant mosh user@server, si les packages mosh sont installés aux deux extrémités.

La principale raison des échecs de connexion est que vous devez atteindre le serveur sur un port UDP (plage par défaut: 60000-61000) pour que mosh fonctionne. Donc, si le serveur est derrière un pare-feu, vous n'avez généralement pas de chance si vous ne pouvez pas y percer vous-même ( implications pour la sécurité ).

6
Perseids

Si vous souhaitez avoir une période de connexion plus longue, ajoutez dans le client:

echo 'ServerAliveInterval 30' | tee -a ~/.ssh/config
echo 'ServerAliveCountMax 1200' | tee -a ~/.ssh/config

ServerAliveCountMax par défaut, il est réglé sur 3. Par conséquent, une fois que le ServerAliveInterval a envoyé 3 petits paquets d'informations à votre serveur, il se déconnectera automatiquement. La définition de 1200 signifie que ce processus devra se produire au moins 1200 fois. En bref, vous devez être connecté au moins 30 * 1200 secondes (10 heures).

5
Francisco Costa

Cela signifie généralement que votre connexion réseau (TCP) a été réinitialisée. Par exemple. votre fournisseur Internet vous a reconnecté ou quelque chose comme ça.

2
maxschlepzig

J'ai eu le même problème mais ce n'est pas comme prévu. Si vous trouvez que sur le même réseau un autre serveur essaie pour la même adresse IP, vous serez confronté au même problème. Pour résoudre ce problème, vous devez vérifier s'il existe d'autres serveurs qui utilisent votre même adresse IP. Cela peut être fait en utilisant la commande arp.

J'utilise Debian alors voici un exemple des commandes que j'utilise pour déterminer si un autre serveur utilisait effectivement la même adresse IP

apt-get install arp-scan
arp-scan -I eth0 -l | grep 192.168.1.42
  192.168.1.42 d4:eb:9a:f2:11:a1 (Unknown)
  192.168.1.42 f4:23:a4:38:b5:76 (Unknown) (DUP: 2)

Vous remarquerez deux ensembles d'adresses mac utilisant la même adresse IP. Évitez les conflits en définissant l'un sur une autre adresse IP.

1
Bill Ang

Une autre cause du "message de canal cassé" est qu'une autre machine tente d'utiliser la même adresse IP que votre hôte.

Un moyen simple de tester si quelqu'un d'autre utilise cette adresse IP:

  1. Éteignez votre hôte
  2. cingler la même IP pour voir si une autre machine utilise cette IP

Pour savoir quelles machines sont sur votre réseau, vous pouvez utiliser ce titre de question Unix et Linux: Comment trouver quelles autres machines sont connectées au réseau local .

0
Josir