ssh tunnel recusando conexões com “channel 2: open failed”

47

De repente (leia-se: sem alterar nenhum parâmetro), minha máquina virtual netbsd começou a agir de forma estranha. Os sintomas dizem respeito ao tunelamento ssh.

Do meu laptop eu inicio:

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

Então, em outro shell:

$ irssi -c localhost -p 7000

A depuração do ssh diz:

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

Eu também tentei com localhost: 80 para se conectar ao servidor web (remoto), com resultados idênticos.

O host remoto executa o 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

Estou um pouco perdida. Eu tentei executar tcpdump no host remoto e vi esses 'maus 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>

Eu tentei reiniciar o daemon ssh sem sucesso. Ainda não reiniciei - talvez alguém aqui possa sugerir outros diagnósticos. Eu acho que pode ser o driver da placa de rede virtual, ou alguém enraizou o nosso ssh.

Idéias ..?

    
por lorenzog 19.03.2013 / 10:32

10 respostas

23

Problema resolvido:

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

... aparentemente, ' localhost ' não foi apreciado pelo host remoto. No entanto, o controle remoto /etc/hosts contém:

::1                     localhost localhost.
127.0.0.1               localhost localhost.

enquanto a interface de rede local é

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

Suspiro. tanto para a recompensa de 100rp eu coloquei:)

    
por 31.03.2013 / 22:48
18

Embora o problema do OP já tenha sido resolvido, decidi compartilhar a solução para o meu problema, porque recebi a mesma mensagem de erro do ssh e não encontrei nenhuma solução em outros sites.

No meu caso eu tive que me conectar ao serviço que escuta apenas no IPv6. Eu tentei:

ssh -f [email protected] -L 51005:127.0.0.1:51005 -N
ssh -f [email protected] -L 51005:localhost:51005 -N

e algumas outras formas, mas não funcionou. Qualquer tentativa de conexão com http://localhost:51005 causa erros como este: channel 2: open failed: connect failed: Connection refused

A solução é:

ssh -f [email protected] -L 51005:[::1]:51005 -N

O endereço IPv6 deve estar entre colchetes.

    
por 26.09.2013 / 10:23
6

Eu tentaria primeiro isso.

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

Você pode usar "-v" até 3 vezes para aumentar a verbosidade.

Acho que essa mensagem de erro pode surgir se um firewall bloquear a porta 7000, mas você já descartou isso. (Se os leitores posteriores não descartarem isso, veja a saída de netstat --numeric-ports .)

Eu acho que eu poderia ter visto essa mensagem de erro há muito tempo, quando o ssh primeiro tomou conhecimento dos endereços IPV6 após uma atualização. Eu posso estar errado sobre isso. Se você sentir vontade de experimentar, você pode tentar o endereço de loopback IPV6 "0: 0: 0: 0: 0: 0: 0: 1" (ou ":: 1").

    
por 01.04.2013 / 13:47
3

Eu encontrei este mesmo erro ao tentar conectar ao mysql em outro servidor através de um túnel ssh. Descobri que o parâmetro bind-address em /etc/my.cnf no servidor de destino estava vinculado ao meu ip externo (servidor dual NIC) em vez de interno, para o qual não tive uso.

Quando eu defino bind-address = 127.0.0.1, eu posso usar com sucesso o meu túnel ssh da seguinte forma:

ssh -N -f -L 3307:127.0.0.1:3306 [email protected]

mysql -h 127.0.0.1 --port=3307 --protocol=TCP -uusername -ppassword
    
por 04.04.2014 / 01:55
3

Encontrei esse erro quando estava encaminhando portas com um nome de domínio completo em vez de localhost:

ssh -L 5900:host.name.com:5900 x11vnc

A porta estava sendo aberta apenas para o host local, portanto, para aceitar conexões com um nome totalmente qualificado, eu tive que adicionar uma descrição da porta de ligação :

ssh -L *:5900:host.name.com:5900 x11vnc

que permitiria conexões de qualquer lugar (por isso não é tão seguro, use-o com moderação).

    
por 11.12.2014 / 20:47
2

"... aparentemente, 'localhost' não foi apreciado pelo host remoto. No entanto, o /eti / hosts remoto contém:"

Exceto por você estar executando o ssh no cliente, o 'localhost' não foi apreciado pelo seu cliente. O arquivo / etc / hosts remoto é para conexões remotas fora não recebidas .

    
por 01.04.2013 / 16:42
2

Para mim, adicionar o ":" inicial funciona assim, o comando no seu caso seria assim:

ssh -L :7000:localhost:7000 user@host -N -v
    
por 13.04.2017 / 01:53
1

???

channel 2: open failed: connect failed: Connection refused

Em user@host não há nada escutando a porta 7000, isso é simples e isso é tudo.

    
por 31.03.2013 / 06:06
1

Recebi a mesma mensagem de erro:

channel 3: open failed: connect failed: Connection refused

E a causa foi erro humano - eu tentando acessar uma porta diferente no host remoto daquele que eu especifiquei.

Pensei em compartilhar isso, embora essa provavelmente não seja a razão pela qual a maioria de vocês está tendo esse erro.

    
por 27.04.2017 / 09:48
1

Para mim, eu estava tentando ssh -L <port>:<remote server IP>:<port> <login>@<remote server IP> quando deveria estar fazendo ssh -L <port>:127.0.0.1:<port> <login>@<remote server IP> .

Espero que isso ajude alguém!

    
por 17.09.2017 / 05:11