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

时间:2013-09-09 19:25:04

标签: macos firefox ssh router portforwarding

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

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

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

我可以成功建立VPN连接。我也可以使用此命令成功设置SSH: ssh -v -L 8783:localhost:8783 myacct@server.com

以下是成功的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通过防火墙进入我的笔记本电脑(我甚至不确定我是否需要这样做)。帮助

10 个答案:

答案 0 :(得分:62)

ssh -v -L 8783:localhost:8783 myacct@server.com
...
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 :(得分: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
glue@ec2-54-162-180-7.compute-1.amazonaws.com

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

我是如何拍摄的?

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

希望这有帮助。

答案 2 :(得分:0)

我曾经遇到类似的问题因为' localhost'服务器在重新启动网络服务时不可用,例如' ifdown -a'但仅后面跟着#if; -eo1'。除了服务器没有收听端口,你还可以检查“localhost”#39;可用与否。

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

答案 3 :(得分:0)

当我想通过隧道建立vnc连接时遇到了这个问题。 但是vncserver没有运行。 我通过使用vncserver :3打开远程计算机上的通道来解决它。

答案 4 :(得分:0)

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

AllowTCPForwarding yes PermitOpen any

然后重新启动ssh

答案 5 :(得分:0)

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

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

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

答案 6 :(得分:0)

这意味着远程虚拟机不在监听当前端口,我通过在虚拟机服务器中添加端口来解决此问题

答案 7 :(得分:0)

只需将localhost替换为127.0.0.1

(答案基于此页面上其他人的答案。)

答案 8 :(得分:0)

就我而言,它在 linux 上运行 translate{ field => "[log.file.path]" destination => "[operator_name]" dictionary => { if contains "[E-1].[P-28]" => "OPERATOR-1" if contains "[E-1].[P-45]" => "OPERATOR-2" if contains "[E-1].[P-51]" => "OPERATOR-3" 后工作。

  1. 在 linux 命令行输入:vncserver
  2. 在那里输入 sudo ssh -L 5901:localhost:5901 -i <ssh_private_key> <username>@<public-IP-address>
  3. 转到 VncViewer 应用程序并使用 vncserver
  4. 进行连接

enter image description here

答案 9 :(得分:0)

当我尝试通过 ssh 隧道连接我的 mlflow ui 以远程查看时,我遇到了同样的错误。正如第一个答案中提到的,出现错误是因为服务器上没有任何东西在侦听端口。对我来说,这是因为我忘记在我的远程机器上启动 mlflow 应用!因此,一般而言 - 确保您尝试远程访问的应用正在运行。