我想通过一个可公开访问的服务器(公共)连接到 NAT 后面的计算机(本地)。
在本地:
ssh -g -R 8000:localhost:22 user@public
然后在公共场合:
ssh -p 8000 user@public
但我越来越error: Connection refused.
当我登录到公共服务器时,我可以通过以下方式验证隧道是否正常工作:
ssh -p 8000 localhost
这将在本地计算机上打开 ssh。
我是否怀疑公共服务器充当透明代理有什么问题?或者如何让它像那样工作。
答案1
出于安全考虑,SSH 远程端口转发将默认绑定到 localhost/loopback。通常,最好不要允许其他主机访问您的转发端口。
要覆盖此行为,您需要做两件事:
GatewayPorts
在服务器上启用该选项。在客户端上指定绑定地址,或
*
绑定到所有地址。ssh -R \*:8000:localhost:22 user@public
转义星号以确保你的 shell 不会扩展它。
答案2
这看起来更像是远程计算机 public 上的设置问题。默认情况下,openssh sshd(我猜是正在使用的)的设置 GatewayPorts 变为 no,这会强制远程端口转发仅在 localhost 上侦听。
解决方案是编辑 /etc/ssh/sshd_config(或等效文件),将 GatewayPorts 设置为 yes 或 clientspecified。如果您选择后者,则必须将隧道请求更改为 -R *:8000:localhost:22 之类的内容。