ssh 隧道拒绝与“通道 2:打开失败”的连接

lor*_*zog 90 networking ssh connection netbsd

突然间(阅读:没有更改任何参数)我的 netbsd 虚拟机开始运行异常。症状与 ssh 隧道有关。

我从我的笔记本电脑启动:

$ ssh -L 7000:localhost:7000 user@host -N -v
Run Code Online (Sandbox Code Playgroud)

然后,在另一个外壳中:

$ irssi -c localhost -p 7000
Run Code Online (Sandbox Code Playgroud)

ssh 调试说:

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
Run Code Online (Sandbox Code Playgroud)

我还尝试使用 localhost:80 连接到(远程)Web 服务器,结果相同。

远程主机运行 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
Run Code Online (Sandbox Code Playgroud)

我有点失落。我尝试tcpdump在远程主机上运行,发现这些“坏 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>
Run Code Online (Sandbox Code Playgroud)

我尝试重新启动 ssh 守护进程无济于事。我还没有重新启动 - 也许这里有人可以建议其他诊断。我认为它可能是虚拟网卡驱动程序,或者有人植根了我们的 ssh。

想法..?

lor*_*zog 63

问题解决了:

$ ssh -L 7000:127.0.0.1:7000 user@host -N -v -v
Run Code Online (Sandbox Code Playgroud)

...显然,远程主机不喜欢“ localhost ”。然而,远程/etc/hosts包含:

::1                     localhost localhost.
127.0.0.1               localhost localhost.
Run Code Online (Sandbox Code Playgroud)

而本地网络接口是

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
Run Code Online (Sandbox Code Playgroud)

叹。我付出了 100 卢比的赏金:)

  • 实际上,重要的一点是将“localhost”替换为“127.0.0.1”。附加的“-v”参数可能会有所帮助,但它们不是我的目标。谢谢。 (3认同)

rzy*_*mek 23

虽然OP的问题已经解决了,我还是决定分享一下我的问题的解决方案,因为我从ssh得到了同样的错误信息,在其他网站上没有找到任何解决方案。

就我而言,我必须连接到仅侦听 IPv6 的服务。我试过:

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

和其他一些方法,但没有用。任何连接尝试http://localhost:51005都会导致如下错误: channel 2: open failed: connect failed: Connection refused

解决办法是:

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

IPv6 地址必须在方括号中。


Mik*_*ll' 12

我会先试试这个。

$ ssh -L 7000:127.0.0.1:7000 user@host -N -v -v
Run Code Online (Sandbox Code Playgroud)

您最多可以使用“-v”3 次来增加详细程度。

我认为此错误消息可以发生,如果防火墙阻止端口7000,但你已经排除了这种可能性。(如果后来的读者还没有排除这一点,请查看 的输出netstat --numeric-ports。)

我可能很久以前就看到过这个错误消息,当时 ssh 在更新后第一次意识到 IPV6 地址。我可能错了。如果您想尝试,可以尝试使用 IPV6 环回地址“0:0:0:0:0:0:0:1”(或“::1”)。