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.
Réponses
Trop de publicités?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
.
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.
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é.
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
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 ?
- Réponses précédentes
- Plus de réponses