Que puis-je faire pour configurer SSH sur le client et les serveurs pour éviter les Write Failed: broken pipe
erreurs? Cela se produit souvent si vous mettez en veille votre ordinateur client et que vous le reprenez plus tard.
screen
?
Que puis-je faire pour configurer SSH sur le client et les serveurs pour éviter les Write Failed: broken pipe
erreurs? Cela se produit souvent si vous mettez en veille votre ordinateur client et que vous le reprenez plus tard.
screen
?
Réponses:
J'ai essayé ceci /etc/ssh/ssh_config
pour Linux et Mac:
Host *
ServerAliveInterval 120
C'est la fréquence à laquelle, en secondes, il doit envoyer un message keepalive au serveur. Si cela ne fonctionne pas, entraînez un singe à appuyer sur Entrée toutes les deux minutes pendant que vous travaillez.
Vous pouvez définir soit ServerAliveInterval
dans /etc/ssh/ssh_config
l'ordinateur client, soit ClientAliveInterval
dans /etc/ssh/sshd_config
l'ordinateur serveur. Essayez de réduire l’intervalle si vous obtenez toujours l’erreur.
La configuration pour un seul utilisateur peut être définie dans un fichier à la ~/.ssh/config
fois côté serveur et côté client. Assurez-vous que le fichier dispose des autorisations appropriées chmod 644 ~/.ssh/config
.
Bad configuration option: ClientAliveInterval
Bad configuration option
erreur sur OSX 10.8.4.
Les sessions SSH peuvent être interrompues pour des raisons nombreuses et probablement inévitables.
Un utilitaire utile qui peut être utilisé pour atténuer les problèmes causés par cela s’appelle 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
une session SSH, un nouveau terminal sera ouvert et vous pourrez l'utiliser pour exécuter des travaux. Disons que votre session SSH meurt dans le processus. Courir screen -d
ensuite 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.
screen -d -r
pour récupérer votre dernière session.
screen -dr
. Ou screen -x
selon ce que vous comptez faire. Le fait est qu'il faut savoir ce que font tous ces commutateurs pour pouvoir utiliser ceux qui conviennent et ne pas suivre aveuglément les suggestions des internautes. Il y a un résumé compact disponible ici: ss64.com/bash/screen.html
Configuration client
Essayez de créer le fichier:
~/.ssh/config
Ajoutez le contenu:
Host *
ServerAliveInterval 30
ServerAliveCountMax 5
Maintenant ssh sur votre serveur et voyez si votre problème est résolu. L'option ClientAliveInterval n'est utile que lors de la configuration du serveur ssh (c'est-à-dire sshd), elle ne change rien du côté du client ssh. Ne l'utilisez donc pas dans le fichier de configuration ci-dessus.
Ceci enverra un signal bonjour au serveur si aucun paquet n'a été reçu au cours des 30 secondes précédentes (comme spécifié ci-dessus). Toutefois, si le nombre de signaux consécutifs Bonjour-êtes-vous-il atteint ServerAliveCountMax, ssh se déconnectera du serveur. La valeur par défaut est 3 (donc 3 * 30 = 90 secondes sans activité du serveur), augmentez-la si cela 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 d'autres options. Vous pouvez ne pas vouloir appliquer cela à tous les serveurs auxquels vous vous connectez auxquels cet exemple le fera. Ou limitez-le à un serveur particulier en remplaçant la ligne Host *
par Host <IP>
(remplacez par une adresse IP, reportez-vous à la page de manuel ssh_config).
Configuration du serveur
De même, vous pouvez dire au serveur d'être doux avec vos clients. Le fichier de configuration est /etc/ssh/sshd_config
.
ClientAliveInterval 20
ClientAliveCountMax 5
Vous pouvez le désactiver en définissant ClientAliveInterval
sur 0
ou sur ClientAliveInterval
et ClientAliveCountMax
en définissant une inactivité maximale du client ssh sans répondre aux sondes. L'un des avantages de ces paramètres par rapport à TCPKeepAlive est que les signaux sont envoyés via les canaux cryptés, ce qui réduit les risques d'usurpation d'identité.
Je suis en train de mettre à jour un serveur Ubuntu de lucide à précis et j'ai perdu la connexion SSH au milieu de la mise à niveau avec le message "Échec de l'écriture. Tube de Brocken". ClientAliveInterval et ServerAliveInterval n'ont rien fait. La solution consiste à activer les options TCPKeepAlive dans le client ssh:
TCPKeepAlive yes
dans
/etc/ssh/ssh_config
Pour le client, éditez votre fichier ~/.ssh/config
(ou /etc/ssh/ssh_config
) comme suit:
Host *
TCPKeepAlive yes
ServerAliveInterval 120
TCPKeepAlive - Spécifie si le système doit envoyer des messages de maintien TCP de l'autre côté. S'ils sont envoyés, la mort de la connexion ou le crash de l'une des machines sera correctement constaté. Cependant, cela signifie que les connexions mourront si la route est interrompue temporairement et que certaines personnes la trouvent ennuyeuse (la valeur par défaut est "oui").
ServerAliveInterval - Définit un intervalle de délai d'attente en secondes à l'issue duquel, si aucune donnée n'a été reçue du serveur, ssh (1) envoie un message via le canal chiffré pour demander une réponse au serveur. La valeur par défaut est 0, indiquant que ces messages ne seront pas envoyés au serveur.
Pour le serveur, éditez votre /etc/ssh/sshd_config
comme:
ClientAliveInterval 600
ClientAliveCountMax 0
Si vous voulez que le client ssh quitte (temporisation) automatiquement après 10 minutes (600 secondes).
ClientAliveCountMax - Ceci indique le nombre total de messages checkalive envoyés par le serveur ssh sans obtenir de réponse du client ssh. La valeur par défaut est 3.
ClientAliveInterval - Cela indique le délai d'attente en secondes. Après x secondes, le serveur ssh enverra un message au client lui demandant de répondre. Deafult vaut 0 (le serveur n'enverra pas de message au client à vérifier).
Voir aussi: Que font les options ServerAliveInterval
et ClientAliveInterval
dans sshd_config, précisément?
J'aime absolument Mosh. Je me connecte fréquemment à un serveur, ferme mon ordinateur portable et vais dans un café, l'ouvre et continue comme si rien n'avait changé.
Mosh (shell mobile)
Application de terminal distant qui permet l' itinérance , prend en charge la connectivité intermittente et fournit une modification intelligente de l'écho local et de la ligne des touches de l'utilisateur.
Mosh remplace SSH. Il est plus robuste et réactif, en particulier via les liaisons Wi-Fi, cellulaires et longue distance.
Mosh est un logiciel gratuit, disponible pour GNU / Linux, FreeBSD, Solaris, Mac OS X et Android.
Pour moi, je me sentais Write failed: Broken pipe
même quand je tapais activement dans vim ou à l’invite du shell. Je ne pouvais pas non plus naviguer sur Internet localement pendant un moment. (Je me connectais à distance à Ubuntu via Terminal.)
D'autres membres de mon réseau diffusent beaucoup de vidéos de Netflix et d'autres lieux. Je ne peux pas le prouver, mais je soupçonne que c'est un problème de FAI ou de routeur. Par exemple, Verizon et Netflix se pointent du doigt pour résoudre les problèmes de réseau de leurs clients.
Si vous disposez d'une connexion à distance et diffusez de la vidéo ou de la musique en streaming avec une connexion SSH ou Telnet simultanée, il est inévitable qu'à un moment donné, vous recevez un message de canal cassé. La mise à niveau du forfait haut débit de mon FAI semblait rendre ma connexion interrompue moins fréquente.
J'ai posté ma réponse ici, car ce n'était pas une machine virtuelle Ubuntu.
ssh -o IPQoS=throughput user@host
J'ai un script sur le serveur distant qui ne semble jamais échouer, quel que soit le client ou le serveur de configuration SSH.
#!/bin/bash
while true; do date; sleep 10; done;
Enregistrez-le dans un fichier dummy.sh et exécutez-le rapidement avant de réduire la fenêtre ou de vous en éloigner. Il continuera à imprimer l’horodatage actuel sur le serveur et maintiendra votre connexion en vie tant que la connexion n’est pas abandonnée pour une autre raison. Lorsque vous revenez à ce terminal, appuyez simplement sur CTRL + C et continuez à travailler.
top
courir
Vous pouvez ajouter ces arguments chaque fois que vous appelez ssh: -o ServerAliveInterval=15 -o ServerAliveCountMax=3
Vous n'avez pas besoin de modifier les fichiers / etc / ssh / * config si vous le faites.
Vous pouvez créer un alias ou une fonction ou un script bash pour faciliter la tâche.
Par exemple, ces fonctions bash, vous pouvez ajouter dans votre .bashrc, do_ssh est utilisé manuellement pour activer keepalives. do_ssh_pty est utilisé dans les scripts pour définir pty et éviter les invites.
do_ssh() {
ssh -o ServerAliveInterval=15 -o ServerAliveCountMax=3 $*
}
do_ssh_pty() {
ssh -tt -o "BatchMode=yes" -o "StrictHostKeyChecking=no" -o ServerAliveInterval=15 -o ServerAliveCountMax=3 $*
}
Maintenant do_ssh user@host
peut être utilisé ou do_ssh user@host <args> <command>
et Keepalives sera actif.