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

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

我想在具有不可路由 IP 的机器 X 上转发 sshd(端口 22)。转发选项包括nc(这很糟糕)、inetd(需要权限)、iptables(需要权限)和ssh。因此我使用ssh,它还有提供加密隧道的额外好处。

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

X $ ssh -R8022:localhost:22 Y

这可以工作,但是端口 8022 已绑定到环回:

Y $ netstat -ant
. . .  
tcp        0      0 127.0.0.1:8022          0.0.0.0:*               LISTEN

这意味着我无法从任何外部机器连接。由于GatewayPortsnoY 中/etc/ssh/sshd_config,我无法指定另一个绑定地址。有什么想法吗?


注意:我确实设法通过使用其他从 Y 到 Y 的隧道:

Y $ ssh -g -L9022:localhost:8022 localhost

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

答案1

连接上Y之后尝试运行socat之类的程序吗?

ssh -R8022:localhost:22 Y socat tcp-listen:9022,fork,reuseaddr tcp:127.0.0.1:8022

然后你就可以通过 Y:9022 连接到 X 了

答案2

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

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

在主机 Y 上:

ssh -f -N -q -L :8022:localhost:22 user@X应该可以

-f:守护进程

-N:没有命令

-q:安静

-L:端口转发

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

相关内容