2 votes

Comment déterminer la raison de la rupture du tuyau SSH

Au cours de la semaine dernière, ma connexion SSH à une instance Amazon EC2 n'a cessé d'être déconnectée avec le message suivant

Echec de l'écriture : Tube cassé

En lisant quelques sites, j'ai supposé que c'était dû au fait qu'aucun délai d'attente n'avait été défini. ~/.ssh/config comme suit, en fonction de

### Stop timing out connections
ServerAliveInterval 120  
ServerAliveCountMax 20  

TCPKeepAlive yes

### SSH Connection pooling for faster additional connections to a machine
ControlMaster auto  
ControlPath /tmp/ssh_mux_%h_%p_%r

Host *  
  ControlMaster auto  
  ControlPath ~/.ssh/control/%r@%h:%p  
  ControlPersist 3600  

### Make it so ssh-ing from one server to another passes keys around automagically
Host *
ForwardAgent yes

### Get rid of SSH connection delays
GSSAPIAuthentication no

### Use less encryption on servers I cant get to off-network
Host 10.* 172.* 192.168.*  
Ciphers blowfish-cbc

Ces réglages ne semblaient pas avoir d'effet, pourtant j'ai réalisé que lorsque je suis pas à la maison, la connexion reste inactive comme l'année dernière. Je me suis connecté en SSH à l'instance sur deux réseaux distincts autres que le Wifi de ma maison, donc je suppose que quelque chose s'est produit à la maison au cours des deux dernières semaines pour modifier le comportement de la connexion SSH.

En utilisant Wireshark ou autre, comment puis-je suivre/diagnostiquer où et quand le problème de rupture des tuyaux SSH se produit sur mon réseau domestique ?

Utilisation de

  • Mac OS 10.7.5
  • OpenSSH_5.6p1, OpenSSL 0.9.8r 8 févr. 2011
  • Amazon EC2 AMI t1.micro

1voto

user101314 Points 1

Vérifiez les paramètres locaux de maintien en vie sur votre mac. Voici les miens.. :

sysctl -a | grep tcp.keep
net.inet.tcp.keepidle: 3600
net.inet.tcp.keepintvl: 150
net.inet.tcp.keepinit: 75000
net.inet.tcp.keepcnt: 8

J'avais besoin de changer le paramètre keepintvl à une valeur plus élevée :

sudo sysctl -w net.inet.tcp.keepintvl=7500

Puis le message d'erreur ssh "write failed : Broken pipe" ont disparu.

0voto

Greg Cain Points 2933

Vous n'indiquez pas quel système d'exploitation fonctionne sur votre instance EC2. Supposons que c'est une variante de linux.

La première chose à faire est d'augmenter la quantité de journalisation fournie par votre SSHD. Vous avez deux façons de le faire. Vous pouvez soit modifier les options pour que SSHD démarre toujours avec les drapeaux de débogage, soit démarrer une autre instance sur un port non standard. Dans tous les cas, le secret pour obtenir une sortie de débogage est d'utiliser les -d. Extrait de la page de manuel d'un serveur Mint (variante Ubuntu)

-d Mode débogage. Le serveur envoie une sortie de débogage verbeuse sur l'erreur standard, et ne se met pas en arrière-plan. Le serveur n'effectue pas non plus de fork et ne traitera qu'une seule connexion. Cette option est uniquement destinée au débogage du serveur. Les options -d multiples augmentent le débogage de débogage. Le maximum est de 3.

Depuis votre client, vous pouvez utiliser les options verbeuses de ssh TO le serveur, comme ssh -vvv user@host.com -p port que vous avez utilisé pour votre sshd.

Je vous suggère également de supprimer la plupart des éléments de votre fichier de configuration, afin de vous assurer que vous n'aggravez pas le problème.

Aucune de ces choses n'est une réponse, mais elles peuvent vous en rapprocher.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X