我无法公开启用 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
就会挂在那里,什么也不做,甚至客户端也没有调试输出。localhost
127.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 应该可以,但我没有尝试。虽然这个答案对于这个问题来说已经很晚了,但我希望它能帮助那些面临同样问题的人。