SSH:疑难解答“侦听端口的远程端口转发失败”错误


4

问题:为什么 ssh -N -R 2222:localhost:22 <bluehost_user>@<bluehost_ip> 导致“侦听端口的远程端口转发失败”错误?目标是建立具有端口转发的反向隧道,以便始终ssh到具有动态专用IP的NAT路由器后面的主机。有关详情,请参阅图片

已经尝试过:

  1. 研究了有关Google,Stackoverflow等的现有文献。有关此错误消息的主题,但是给出的解决方案解决了与此特定实例不同的根本原因,因为在这种情况下这些解决方案无法解决错误。
  2. 我已经执行了几次诊断来验证所需的端口是否打开。其中一些结果如下图所示。

反向SSH隧道

Image 1

更新

我在第2步尝试以下命令: reduser@redhost:~ ssh greenuser@greenhost -p 2222

它应该是: reduser@redhost:~ ssh greenuser@bluehost -p 2222 您希望在bluehost IP上使用greenuser凭据,因为您在使用端口2222时登录的主机实际上是绿色主机。



@balwa已检查过,但这是关于连接在一段时间后到期。在我的情况下,连接永远不会成功。我还使用了KeepAliveInterval参数,因此可以明确控制某些时间因素。
ngm_code

@ModeratorImpersonator试过了 ssh -N -R <bluehost_ip>:2222:localhost:22 和ssh似乎把它当作无效的语法。 ssh简单地回来了 usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file] [-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec] ...
ngm_code

@Ramhound我把问题改写为更直接。请暂停或提供更具体的评论,说明为何暂停。
ngm_code

@DavidPostill我不同意这个帖子被搁置。这个问题, 导致错误消息的原因是什么 在我看来是完全可以接受的。
MariusMatutiae

Answers:


11

为什么 ssh -N -R 2222:localhost:22 <bluehost_user>@<bluehost_ip> 导致“侦听端口的远程端口转发失败”错误?

当我尝试使用已经在远程端采用的端口时,我收到了这个确切的警告。

的输出 netstatbluehost 表示某些东西已经在侦听端口 2222 那里。它没有显示它是什么。

解决方案:

  1. 更改 2222 在你的 ssh 调用其他未使用的端口 bluehost。只要让它大于 1023 因为普通用户无法绑定 知名港口 ;否则,无论端口是否在使用,您都会收到相同的警告。
  2. 或者确定听力过程(开启 bluehostsudo lsof -i TCP:2222;终止或重新配置它以建立端口 2222 可用。

编辑:

在你的情况下这一部分 man ssh 似乎很重要:

-R [bind_address:]port:host:hostport
-R [bind_address:]port:local_socket
-R remote_socket:host:hostport
-R remote_socket:local_socket

[...]默认情况下,服务器上的TCP侦听套接字仅绑定到回送接口。这可以通过指定a来覆盖 bind_address。空的 bind_address或者地址' * ',表示远程套接字应该侦听所有接口。指定遥控器 bind_address 只有服务器才会成功 GatewayPorts 选项已启用(请参阅 sshd_config(5) )。

这意味着你应该拥有 GatewayPorts yes 在里面 sshd_configbluehost。读 man 5 sshd_config 了解更多。不要忘记之后重新加载服务。


有趣的是,我看到了来自中国的联系(注意我几周前在那里使用这台主机作为来自中国的VPN)。虽然这个主机是沙盒,但它仍然令人担忧 <bluehost_user>@<bluehost_ip>:~$ netstat | grep 2222 tcp 0 0 <bluehost_ip>:2222 htuidc.bgp.ip:2599 SYN_RECV 端口2222是否打开,如何在没有用户名和密码的情况下连接(注意这是tcp而不是ssh)?我确实有sshd在2222上配置了 /etc/ssh/sshd_config
ngm_code

其他信息来自 lsofCOMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1034 root 3u IPv4 13344 0t0 TCP *:2222 (LISTEN) sshd 1034 root 4u IPv6 13353 0t0 TCP *:2222 (LISTEN)
ngm_code

@ngm_code所以这是你的 sshd 需要重新配置。或者只是在你使用另一个端口 ssh -R 来自其他地方
Kamil Maciorowski

好的,我来看看。所以你说它通过打开端口是不兼容的 /etc/ssh/sshd_config 在运行时通过调用CLI中的ssh打开它之前?
ngm_code

@ngm_code是的。端口(或通常是一个端口 22 )配置 sshd_config 用于SSH客户端连接。在您的情况下,您连接到这些端口之一并订购 sshd 打开 额外 端口并将其隧道传送到您的机器。如果它可能是同一个端口那么 sshd 不知道传入的数据包是发往它还是发往隧道。
Kamil Maciorowski

3

确保bluehost上的端口2222上没有挂起连接。 在bluehost测试 lsof -t -i:2222 是否有任何进程ID正在使用端口2222.此外,请终止此进程(例如使用 kill $(lsof -t -i:2222) )。

这解决了我的问题。希望这些信息对其他人有用。 :)

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.