即使使用 GatewayPorts,SSH 远程端口转发(隧道)也无法公开工作

即使使用 GatewayPorts,SSH 远程端口转发(隧道)也无法公开工作

我无法公开启用 SSH 远程端口转发。

在客户端:

ssh -vvv -nNT -p 2222 -R \*:8882:localhost:22 xx@<server_address>

输出:

...

debug2:我们发送了密码包,等待回复

debug1:验证成功(密码)。

已向 xxx.com ([xxx.xxx.xxx.xxx]:2222) 验证。

debug1:来自 *:8882 的远程连接转发到本地地址 localhost:22

debug2:fd 3 设置 TCP_NODELAY

debug3:ssh_packet_set_tos:设置IP_TOS 0x10

debug1:请求[电子邮件保护]

debug1:进入交互式会话。

debug1: 远程转发成功:监听 *:8882,连接 localhost:22

debug1:处理所有远程转发请求

在服务器端:(已启用 GatewayPorts,已确认sshd -T

netstat -an | grep 8882

输出:

tcp        0      0 0.0.0.0:8882            0.0.0.0:*               LISTEN
tcp6       0      0 :::8882                 :::*                    LISTEN

当连接到 localhost ( ssh -p 8882 xx@localhost) 时,它确实可以工作,我可以登录到客户端的 SSH shell。但是,如果我更改为本地 ip,它ssh就会挂在那里,什么也不做,甚至客户端也没有调试输出。localhost127.0.0.1

netstat输出中可以看出,端口似乎8882已绑定到所有接口,并且应该可以公开使用,但事实并非如此。我做错了什么?

答案1

在 sshd_config 中设置允许隧道AllowTcpForwarding。记得重启 sshd 以使其工作。

答案2

我也遇到了同样的问题,经过一上午的 Google,我发现这与远程服务器的 iptables/防火墙有关。 看起来是端口 2222 没有打开。 然后我在远程服务器(CentOS 7)上执行以下命令解决了这个问题

firewall-cmd --zone=public --add-port=2222/tcp 
firewall-cmd --reload

如果直接编辑 iptables 应该可以,但我没有尝试。虽然这个答案对于这个问题来说已经很晚了,但我希望它能帮助那些面临同样问题的人。

相关内容