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 ?

78voto

Rakesh Agarwal Points 773

Problème résolu :

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

...apparemment, ' localhost n'a pas été apprécié par l'hôte distant. Pourtant, l'hôte distant /etc/hosts contient :

::1                     localhost localhost.
127.0.0.1               localhost localhost.

alors que l'interface du réseau local est

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33184
        inet 127.0.0.1 netmask 0xff000000
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2

Sigh. Autant pour la prime de 100rp que j'ai mis :)

28voto

thethinman Points 309

Bien que le problème de l'OP ait déjà été résolu, j'ai décidé de partager la solution de mon problème, car j'ai reçu le même message d'erreur de ssh et je n'ai pas trouvé de solution sur d'autres sites.

Dans mon cas, j'ai dû me connecter au service qui n'écoute que sur IPv6. J'ai essayé :

ssh -f root@192.168.0.18 -L 51005:127.0.0.1:51005 -N
ssh -f root@192.168.0.18 -L 51005:localhost:51005 -N

et quelques autres moyens mais ça n'a pas marché. Tout essai de connexion à http://localhost:51005 provoque des erreurs comme celle-ci : channel 2: open failed: connect failed: Connection refused

La solution est la suivante :

ssh -f root@192.168.0.18 -L 51005:\[::1\]:51005 -N

L'adresse IPv6 doit être entre crochets.

17voto

nall Points 10996

Je commencerais par essayer ceci.

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

Vous pouvez utiliser "-v" jusqu'à 3 fois pour augmenter la verbosité.

Je pense que ce message d'erreur peut se poser si un pare-feu bloque le port 7000, mais vous aviez déjà écarté cette possibilité. (Si les lecteurs ultérieurs n'ont pas exclu cette possibilité, regardez la sortie de la commande netstat --numeric-ports .)

I pensez à J'ai peut-être vu ce message d'erreur il y a longtemps, lorsque ssh a pris conscience des adresses IPV6 à la suite d'une mise à jour. Je pourrais me tromper à ce sujet. Si vous avez envie d'expérimenter, vous pouvez essayer l'adresse de bouclage IPV6 "0:0:0:0:0:0:0:1" (ou "::1").

4voto

bilbo baggins Points 41

"...apparemment, 'localhost' n'était pas apprécié par l'hôte distant. Pourtant, le fichier /etc/hosts distant contient :"

Sauf que vous exécutez ssh sur le client, donc 'localhost' n'est pas apprécié par votre client. Le fichier /etc/hosts distant est destiné à la connexion distante. out nicht entrant connexions.

4voto

Tom McQuarrie Points 183

J'ai rencontré cette même erreur en essayant de me connecter à mysql sur un autre serveur via un tunnel ssh. J'ai découvert que le paramètre bind-address dans /etc/my.cnf sur le serveur cible était lié à mon ip externe (serveur à double NIC) plutôt qu'interne, ce dont je n'avais pas l'utilité.

Lorsque j'ai défini bind-address=127.0.0.1, j'ai pu utiliser avec succès mon tunnel ssh comme suit :

ssh -N -f -L 3307:127.0.0.1:3306 user@server.name

mysql -h 127.0.0.1 --port=3307 --protocol=TCP -uusername -ppassword

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