使用 GatewayPorts = no 进行 ssh 端口转发

Fix*_*xee 5 ssh port-forwarding

我想在具有不可路由 IP 的机器 X 上转发 sshd(端口 22)。转发选项是 nc(这太可怕了)、inetd(需要 privs)、iptables(需要 privs)和 ssh。所以我使用 ssh,它具有提供加密隧道的额外好处。

我有一台带有公共 IP 的机器 Y。我想将 X:22 公开为 Y:8022。

X $ ssh -R8022:localhost:22 Y
Run Code Online (Sandbox Code Playgroud)

这有效,但端口 8022 绑定到环回:

Y $ netstat -ant
. . .  
tcp        0      0 127.0.0.1:8022          0.0.0.0:*               LISTEN
Run Code Online (Sandbox Code Playgroud)

这意味着我无法从任何外国机器连接。由于GatewayPortsnoY中的/etc/ssh/sshd_config,我不能具体另一个绑定地址。有任何想法吗?


注意:我确实通过使用从 Y 到 Y 的另一个隧道设法使事情正常工作:

Y $ ssh -g -L9022:localhost:8022 localhost
Run Code Online (Sandbox Code Playgroud)

这是一个非常低效的解决方案:它localhost从端口 9022加密/解密到 8022,然后在发送到 X 之前再次加密。当然必须有更好的方法吗?

max*_*xvw 1

由于 GatewayPorts 已关闭,我没有任何解决方案<-- 回答者自己的评论。

为什么使用反向端口转发?

在主机 Y 上:

ssh -f -N -q -L :8022:localhost:22 user@X应该能解决问题

-f:守护进程

-N:无命令

-q:安静

-L:端口转发

-:leading::用于通过所有接口启用本地端口,而不仅仅是 localhost