Si vous utilisez SSH pour vous connecter à des serveurs Linux distants, vous remarquerez que si vous laissez votre session SSH inactive pendant un certain temps, puis essayez de l'utiliser à nouveau, la session SSH se déconnecte avec un message d'erreur comme celui-ci :
:client_loop: send disconnect: Broken pipe
Sur certains systèmes, il affichera "Échec de l'écriture :canal cassé" ou "Connexion fermée par l'hôte distant".
Voyons ce qui cause cette erreur et comment maintenir votre connexion SSH active.
Correction d'une erreur de tuyau cassé avec SSH
Comme vous l'avez peut-être deviné, la connexion SSH est fermée pour cause d'inactivité. Il n'y a pas de valeur définie, mais elle est généralement d'environ 5 minutes.
Ce que vous pouvez faire pour éviter la déconnexion de la session SSH est d'envoyer un 'message actif' soit du serveur au client (ClientAliveInterval
) ou du client au serveur (ServerAliveInterval
) à un certain intervalle de temps.
De cette façon, vous maintenez la session SSH active car il existe une communication entre le client et le serveur et le serveur comprend que le client est toujours là.
Maintenant, il y a deux façons de le faire. Soit vous envoyez le message vivant du client au serveur, soit du serveur au client.
- Si vous vous connectez à plusieurs serveurs via SSH, configurez-le sur votre ordinateur.
- Si vous êtes un administrateur système et que plusieurs utilisateurs se plaignent d'une déconnexion fréquente de la connexion SSH, vous pouvez le configurer sur le serveur.
Méthode 1 :Modification de la configuration SSH côté client
Supposons que vous souhaitiez maintenir votre connexion SSH active avec jusqu'à 10 minutes (600 secondes) d'inactivité.
Lors de la connexion au système Linux distant via SSH, vous pouvez mentionner le ServerAliveInterval
valeur comme ceci :
ssh -o ServerAliveInterval=600 [email protected]_ip_address
Maintenant, cette chose fonctionne mais entrer manuellement cette option chaque fois que vous vous connectez au serveur est fastidieux. Pourquoi ne pas le rendre permanent ?
J'espère que vous connaissez les fichiers de configuration SSH. Côté client, vous pouvez en profiter pour définir certains paramètres SSH pour des connexions spécifiques ou pour toutes. J'ai expliqué le fichier de configuration SSH en détail ici.
Tout d'abord, assurez-vous que vous disposez du fichier de configuration ssh. Si ce n'est pas le cas, créez-le :
touch ~/.ssh/config
Il est important de lui donner les autorisations de fichier correctes, sinon vous aurez une erreur d'autorisation refusée lors de la connexion via SSH.
Utilisez la commande chmod et ajoutez-y la permission de fichier suivante :
chmod 600 ~/.ssh/config
Si vous vous sentez paresseux ou ne voulez pas entrer dans les détails, utilisez cette commande pour définir l'intervalle de vie à 600 secondes (10 minutes) :
echo "ServerAliveInterval 600" >> ~/.ssh/config
Cela définira la valeur ServerAliveInterval sur 10 minutes pour toutes les connexions SSH que vous utiliserez. Essayez-le si vous le souhaitez.
Si vous voulez le rendre plus approprié, vous devez l'ajouter comme ceci :
Host *
ServerAliveInterval 600
Méthode 2 :Modification de la configuration SSH côté serveur
Le fichier de configuration SSH du serveur se trouve généralement dans /etc/ssh/sshd_config.
Si vous ouvrez ce fichier, vous trouverez ici deux paramètres intéressants :
ClientAliveInterval
: Il s'agit de la période d'inactivité après laquelle le serveur enverra un message actif au client connecté ssh.ClientAliveCountMax
:Il s'agit du nombre de tentatives que le serveur fera pour envoyer le message actif.
Supposons que vous définissiez ClientAliveInterval
à 200 secondes et ClientAliveCountMax
à 3. Cela signifie que le serveur enverra un message actif après 200 secondes. S'il n'y a aucune activité du client, il enverra à nouveau un message actif à 400 secondes. Aucune réponse/activité du client et un autre message actif est envoyé à 600 secondes. Après cela (600 secondes), la connexion SSH est déconnectée.
Vous pouvez modifier le /etc/ssh/sshd_config
fichier dans votre éditeur de texte basé sur un terminal préféré comme Vim. Recherchez les entrées ClientAliveInterval et ClientAliveCountMax. Supprimez la touche # au début des lignes et donnez-leur la valeur appropriée.
Enregistrez et quittez le fichier.
Veuillez ne pas définir le délai d'expiration de la connexion SSH sur plusieurs heures. Ce serait un gaspillage de ressources.
J'espère que ce tutoriel vous a aidé à résoudre le problème d'erreur de tuyau cassé avec la connexion SSH. Vos commentaires sont les bienvenus.