SSH -L连接成功,但localhost端口转发不起作用“通道3:打开失败:连接失败:连接被拒绝”

问题描述 投票:28回答:6

我的实验室在服务器上运行RStudio。几个星期前,从我堂兄的家里,我成功地进入了服务器,并通过我当地的Firefox浏览器拉出了服务器端的RStudio。现在当我尝试从家里(通过我自己的路由器)访问服务器RStudio时,它不起作用。我需要帮助排除故障,我猜它是路由器上的一些问题。我正在运行Mac OSX 10.6.8。不知道大学服务器在运行什么,但我认为这不是服务器端问题。

这是我第一次这样做时的表现,在我堂兄的家里:首先,我进入大学网络;然后我用端口转发呼叫SSH;然后我打开一个Firefox浏览器,连接到我的localhost端口,它在服务器端打开了RStudio,我可以通过本地浏览器窗口访问它。

这是我尝试从家庭网络登录时遇到的问题:

我可以成功建立VPN连接。我也可以使用以下命令成功设置SSH:ssh -v -L 8783:localhost:8783 [email protected]

以下是成功的ssh命令的详细输出的最后几行:

debug1: Authentication succeeded (password).
debug1: Local connections to LOCALHOST:8783 forwarded to remote address localhost:8783
debug1: Local forwarding listening on 127.0.0.1 port 8783.
debug1: channel 0: new [port listener]
debug1: Local forwarding listening on ::1 port 8783.
debug1: channel 1: new [port listener]
debug1: channel 2: new [client-session]
debug1: Entering interactive session.
Last login: Mon Sep  2 04:02:40 2013 from vpnipaddress

所以我认为我仍然在VPN和SSH阶段取得成功(虽然我不知道为什么它说我上次登录时是9月2日,此后我已经登录了几次)。

接下来,我打开Firefox,然后键入localhost:8783,而不是通过浏览器窗口获取RStudio服务器应用程序,我收到以下错误:

在Firefox浏览器窗口中,它显示:找不到服务器,Firefox无法在www.localhost.com找到服务器,检查地址是否有输入错误等。

在终端窗口中,它显示:

debug1: Connection to port 8783 forwarding to localhost port 8783 requested.
debug1: channel 3: new [direct-tcpip]
channel 3: open failed: connect failed: Connection refused
debug1: channel 3: free: direct-tcpip: listening port 8783 for localhost port 8783, connect from 127.0.0.1 port 50420, nchannels 4

我不确定我错了什么。自从我上次成功连接以来,我的笔记本电脑上没有任何改动。我在自己的路由器上(而不是我堂兄的),所以也许我需要搞乱防火墙?我已经允许端口22和8783通过防火墙进入我的笔记本电脑(我甚至不确定我是否需要这样做)。救命?

macos firefox ssh router portforwarding
6个回答
65
投票
ssh -v -L 8783:localhost:8783 [email protected]
...
channel 3: open failed: connect failed: Connection refused

当您连接到本地系统上的端口8783时,该连接将通过您的ssh链接通过server.com上的ssh服务器进行隧道传输。从那里,ssh服务器建立TCP连接到localhost端口8783,并在隧道连接和隧道目标连接之间中继数据。

“连接被拒绝”错误来自server.com上的ssh服务器,当它尝试建立到隧道目标的TCP连接时。 “连接被拒绝”表示连接尝试被拒绝。对拒绝的最简单的解释是,在server.com上,没有任何内容监听localhost端口8783上的连接。换句话说,您尝试隧道连接的服务器软件没有运行,或者它正在运行但它是不听那个港口。


1
投票

张贴这个来帮助某人。

症状:

channel 2: open failed: connect failed: Connection refused
debug1: channel 2: free: direct-tcpip:
   listening port 8890 for 169.254.76.1 port 8890,
   connect from ::1 port 52337 to ::1 port 8890, nchannels 8

我的情景;我不得不使用远程服务器作为堡垒主机连接其他地方。最终目的地/目标:169.254.76.1,端口8890.通过中间服务器与公共IP:ec2-54-162-180-7.compute-1.amazonaws.com

SSH本地端口转发命令:

ssh -i ~/keys/dev.tst -vnNT -L :8890:169.254.76.1:8890
[email protected]

问题是:目标主机上的端口8890没有绑定服务。我忘了开始服务。

我怎么麻烦拍摄:

SSH进入堡垒主机,然后进行卷曲。

希望这可以帮助。


0
投票

我曾经遇到类似的问题,因为重启网络服务时服务器上没有“localhost”,例如'ifdown -a'但后面只有'ifup -eo1'。除了服务器没有监听端口,你也可以检查'localhost'是否可用。

ps:发布它只是希望有类似问题的人可能会受益。


0
投票

当我想通过隧道进行vnc连接时,我遇到了这个问题。但是vncserver没有运行。我用vncserver :3打开远程机器上的通道解决了这个问题。


0
投票

也许为时已晚,但我遇到了同样的问题,并且不想逐个端口映射,所以我改变了我的/etc/ssh/sshd_config文件并添加了:

AllowTCPForwarding yes PermitOpen any

然后只需重新启动ssh


0
投票

注意:localhost是使用本地(环回)网络接口的地址的主机名,127.0.0.1IPv4 network standard中的IP(它是IPv6中的::1)。 0.0.0.0是IPv4标准的“当前网络”IP地址。

我在Docker设置中遇到了这个错误。我有一个在外部服务器上运行的Docker容器,我(正确地)将其端口映射为127.0.0.1:9232:9232。通过端口转发ssh remote -L 9232:127.0.0.1:9232,我希望能够与remote服务器的端口9232进行通信,就好像它是我自己的本地端口一样。

事实证明,Docker容器在127.0.0.1:9232而不是0.0.0.0:9232内部运行其进程,因此即使我正确指定了容器的端口映射,它们也没有在正确的接口上进行映射。

© www.soinside.com 2019 - 2024. All rights reserved.