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
.
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
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é ).
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).
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.
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.
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:
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 .