110 votes

le tunnel ssh refuse les connexions avec "channel 2 : open failed" (canal 2 : ouverture échouée)

Tout à coup (sans changer aucun paramètre), ma machine virtuelle netbsd a commencé à se comporter bizarrement. Les symptômes concernent le tunnelage ssh.

Depuis mon ordinateur portable, je lance :

$ ssh -L 7000:localhost:7000 user@host -N -v

Ensuite, dans un autre Shell :

$ irssi -c localhost -p 7000

Le débogage de ssh dit :

debug1: Connection to port 7000 forwarding to localhost port 7000 requested.
debug1: channel 2: new [direct-tcpip]
channel 2: open failed: connect failed: Connection refused
debug1: channel 2: free: direct-tcpip: listening port 7000 for localhost port 7000, connect from 127.0.0.1 port 53954, nchannels 3

J'ai également essayé de me connecter au serveur web (distant) avec localhost:80, avec des résultats identiques.

L'hôte distant exécute NetBSD :

bash-4.2# uname -a
NetBSD host 5.1_STABLE NetBSD 5.1_STABLE (XEN3PAE_DOMU) #6: Fri Nov  4 16:56:31 MET 2011  root@youll-thank-me-later:/m/obj/m/src/sys/arch/i386/compile/XEN3PAE_DOMU i386

Je suis un peu perdu. J'ai essayé de courir tcpdump sur l'hôte distant, et j'ai repéré ces 'bad chksum' :

09:25:55.823849 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 67, bad cksum 0 (->3cb3)!) 127.0.0.1.54381 > 127.0.0.1.7000: P, cksum 0xfe37 (incorrect (-> 0xa801), 1622402406:1622402421(15) ack 1635127887 win 4096 <nop,nop,timestamp 5002727 5002603>

J'ai essayé de redémarrer le démon ssh, sans succès. Je n'ai pas encore redémarré - peut-être que quelqu'un ici peut suggérer d'autres diagnostics. Je pense que cela pourrait être soit le pilote de la carte réseau virtuelle, soit quelqu'un qui a rooté notre ssh.

Des idées ?

1voto

Roei Bahumi Points 111

J'ai reçu le même message d'erreur :

canal 3 : échec de l'ouverture : échec de la connexion : Connexion refusée

Et la cause était une erreur humaine - j'ai essayé d'accéder à un port différent de celui que j'avais spécifié sur l'hôte distant.

J'ai juste pensé que je devais partager cela, bien que ce ne soit probablement pas la raison pour laquelle la plupart d'entre vous rencontrent cette erreur.

1voto

joe Points 103

Pour le bénéfice des autres qui ont fait une erreur stupide comme moi (une erreur qui n'est pas mentionnée dans les autres réponses) : Assurez-vous que votre machine distante a bien un processus qui écoute sur le port vers lequel vous essayez de vous connecter !

Comme le dit @Kenster ici :

Lorsque vous vous connectez au port 8783 sur votre système local, cette connexion est tunnelisée via votre lien ssh vers le serveur ssh sur server.com. De là, le serveur ssh établit une connexion TCP avec le port 8783 de localhost et relaie les données entre la connexion tunnelée et la connexion à la cible du tunnel. L'erreur "connexion refusée" provient du serveur ssh sur server.com lorsqu'il tente d'établir la connexion TCP avec la cible du tunnel. "Connexion refusée" signifie qu'une tentative de connexion a été rejetée. L'explication la plus simple de ce rejet est que, sur server.com, il n'y a rien qui écoute les connexions sur le port 8783 de localhost. En d'autres termes, le logiciel serveur vers lequel vous avez essayé d'établir un tunnel n'est pas en cours d'exécution, ou bien il est en cours d'exécution mais n'écoute pas sur ce port.

Vérifiez d'abord que votre processus distant est en cours d'exécution, puis qu'il écoute effectivement sur le port auquel vous essayez de vous connecter.

Sur votre machine distante, vous pouvez exécuter l'un de ces programmes (en fonction des paquets disponibles sur votre distribution) pour vérifier quels ports sont écoutés :

sudo lsof -i -P -n | grep LISTEN
sudo netstat -tulpn | grep LISTEN
sudo ss -tulpn | grep LISTEN

Si votre commande est ssh -L -N 7000:127.0.0.1:6000 user@host et que vous ne voyez rien écouter sur 6000, alors c'est votre problème - vous devez trouver pourquoi le processus n'écoute pas sur un port, ou sur le port que vous attendez.

0voto

Il manque l'adresse IP --ip=n.n.n.n à la fin de la ligne. Vous devez spécifier exactement l'IP à connecter.

0voto

Bugsy Points 1

Ce qui a marché pour moi, c'est de changer l'ordre des commandes.

Donc, en gros

$ ssh user@host -L 7000:localhost:7000 -N

Étrange

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X