我想在具有不可路由 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
这意味着我无法从任何外部机器连接。由于GatewayPorts
在no
Y 中/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