ssh 隧道拒绝连接,并显示“通道 2:打开失败”

ssh 隧道拒绝连接,并显示“通道 2:打开失败”

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

我从笔记本电脑启动:

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

然后,在另一个 shell 中:

$ irssi -c localhost -p 7000

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

我也尝试使用 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

我有点迷茫了。我尝试tcpdump在远程主机上运行,​​发现了这些“坏校验和”:

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>

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

想法..?

答案1

问题解决了:

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

...显然, '本地主机' 不受远程主机欢迎。然而,远程/etc/hosts包含:

::1                     localhost localhost.
127.0.0.1               localhost localhost.

而本地网络接口

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

唉。我投入的 100rp 赏金就这么多了 :)

答案2

尽管 OP 的问题已经解决,但我还是决定分享我的问题的解决方案,因为我从 ssh 收到了相同的错误消息,并且在其他网站上没有找到任何解决方案。

在我的例子中,我必须连接到仅侦听 IPv6 的服务。我尝试过:

ssh-f[电子邮件保护]-L 51005:127.0.0.1:51005 -N
ssh-f[电子邮件保护]-L 51005:本地主机:51005 -N

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

解决方案是:

ssh-f[电子邮件保护]-L 51005:[::1]:51005 -N

IPv6 地址必须放在方括号中。

答案3

我将首先尝试这个。

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

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

我认为这个错误信息如果防火墙阻止了端口 7000,但您已经排除了这种可能性,则会出现这种情况。(如果后面的读者还没有排除这种可能性,请查看 的输出netstat --numeric-ports。)

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

答案4

当我尝试通过 ssh 隧道连接到另一台服务器上的 mysql 时,我遇到了同样的错误。我发现目标服务器上的 /etc/my.cnf 中的 bind-address 参数绑定到我的外部 ip(双 NIC 服务器),而不是内部 ip,而内部 ip 对我来说毫无用处。

当我设置 bind-address=127.0.0.1 时,我可以成功使用我的 ssh 隧道,如下所示:

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

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

相关内容