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


70

突然之间(阅读:未更改任何参数)我的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在远程主机上运行,发现了这些“坏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>

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

想法..?


1
有关故障排除,请尝试$ ssh -L 7000:127.0.0.1:7000 user@host -N -v -v。(您最多可以使用“ -v” 3次来增加详细程度。)而且,ssh是否最近被更新了?
Mike Sherrill'Cat Recall'13

我粘贴的输出日志已经使用-v收集了。
lorenzog

1
您最多可以使用-v三次来增加详细程度。因此,您可以查看ssh -L 7000... -N -v -v(两个v)或的输出ssh -L 7000... -N -v -v -v
Mike Sherrill'Cat Recall'13

@ MikeSherrill'CatRecall'也可以使用速记:-vvv
jnns

Answers:


42

问题解决了:

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

...显然,远程主机不喜欢' localhost '。但是,远程/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的赏金我付出了很多:)


1
啊。好吧,我不会费心写下我的评论作为答案。(调查ssh是否在您的系统上更喜欢ipv6地址。)
Mike Sherrill'Cat Recall'13

好吧,您建议将-v选项加倍,但这并没有显示任何新内容。但是,几天后让我再次查看输出有助于查明问题。如果您想写下答案,我很乐意为您提供赏金。
lorenzog

1
实际上,重点是将“ localhost”替换为“ 127.0.0.1”。附加的“ -v”参数可能有所帮助,但它们并不是我的目标。谢谢。
Mike Sherrill'Cat Recall'13

根据有关超级用户 的文章:superuser.com/questions/346971/ssh-tunnel-connection-refused,配置为侦听特定地址的程序将侦听该特定地址
jopasserat 2014年

1
对我来说,添加前导“:”有效,因此您的情况下的命令应如下所示:ssh -L:7000:127.0.0.1:7000 user @ host -N -v -v
valentt

21

尽管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地址必须放在方括号中。


1
如果您使用ssh配置文件怎么办?示例:“ LocalForward localhost:64160 192.168.1.56:3389”
效果

对我来说,添加前导“:”有效,因此您的情况下的命令应如下所示:ssh -f root@192.168.0.18 -L:51005:127.0.0.1:51005 -N
valent17年

9

我先试试这个。

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

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

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

很久以前,当ssh在更新后首次意识到IPV6地址时,我可能已经看到此错误消息。我可能是错的。如果您想尝试,可以尝试IPV6环回地址“ 0:0:0:0:0:0:0:0:1”(或“ :: 1”)。


3

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

除非您在客户端上运行ssh,否则客户端不喜欢'localhost'。远程/ etc / hosts文件用于远程连接不是传入连接。


1
这也让我感到困惑。当您在本地计算机上键入localhost时,它将在本地解析
Ahmedov '18

3

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

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

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

这也对我有用。您只能将MySQL绑定到一个地址。
leeand00

3

我在转发具有完整域名而不是localhost的端口时遇到此错误:

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

该端口仅为本地主机打开,因此要接受具有完全限定名称的连接,我必须添加一个绑定端口说明:

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

这将允许从任何地方进行连接(因此安全性不高,请谨慎使用)。


2

对我来说,添加前导“:”有效,因此您的情况下的命令应如下所示:

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

时间已经过去了很多,我不能回去检查,但这看起来很棒。
lorenzog '17

1

???

通道2:打开失败:连接失败:连接被拒绝

user@host没有监听端口7000的情况下,这很简单,仅此而已。


1
这不是真的。主机:7000上运行着一个服务。我还尝试了其他服务。
lorenzog

2
不,那么它将只是挂起连接。
RickyA

4
@RickyA:其实不是。如果端口未绑定,则连接将被拒绝。我通过使用错误的内部端口(未运行任何服务)收到此错误,当我更正该错误时,该错误消失了。poige是正确的,因为如果端口上没有监听任何内容,则将导致错误。
erb 2015年

1

我收到了相同的错误消息:

通道3:打开失败:连接失败:连接被拒绝

原因是人为错误-我试图访问远程主机上与我指定的端口不同的端口。

只是想我会与您分享,尽管这可能不是大多数人都遇到此错误的原因。


就我而言:这正是我正在做的。如此愚蠢的错误,但是却用这个答案让我检查了端口。h
肯·夏普

1

对我来说,我正在尝试ssh -L <port>:<remote server IP>:<port> <login>@<remote server IP>应该做的事情ssh -L <port>:127.0.0.1:<port> <login>@<remote server IP>

我希望这可以帮助别人!


1

就我而言,替代解释是您输入的错误。

user@host ~ $ ssh -vvvNL 4444:127.0.0.0.1:4444
...
channel 2: open failed: connect failed: Name or service not known

这里发生的是该IP地址具有太多的零,因此不是有效地址。因此,ssh将其视为无法解析的域名。糟糕!

PS:我对此进行了补充,因此在对相同症状进行故障排除时,我们会全面列出可能出现的问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.