SSH 端口转发

SSH 端口转发

我想通过一个可公开访问的服务器(公共)连接到 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 之类的内容。

相关内容