Windows 上的 OpenSSH 始终将用于远程转发的套接字绑定到 LOOPBACK

Windows 上的 OpenSSH 始终将用于远程转发的套接字绑定到 LOOPBACK

正如标题所述。

主机 A 充当服务器(堡垒主机,随便你怎么称呼它)。

现在,主机 B 执行:

ssh -R 2222:localhost:22 用户@A

因此,TCP 套接字在 A 处生成,但它绑定到 2222@回送即阻止与其进行远程连接。

如何将 127.0.0.1 更改为 0.0.0.0或其他任何东西更明智?

答案1

你遗漏了规范bind_address的可选部分-R。在ssh文档(链接至微软)写道,

默认情况下,服务器上的 TCP 侦听套接字将仅绑定到环回接口。这可以通过指定 来覆盖bind_address。空的bind_address或地址*表示远程套接字应侦听所有接口。bind_address仅当启用服务器的GatewayPorts选项时,指定远程才会成功(请参阅sshd_配置(5))。

您正在使用该参数的三元组版本,但您需要四元组版本:

-R port:host:hostport
-R [bind_address]:port:host:hostport

因此,要允许任何人连接到远程服务器上的监听端口,您需要确保GatewayPorts在服务器的sshd_config 使用如下命令变体:

ssh -R :2222:localhost:22 user@A

前导冒号 ( :) 还暗示前导星号通配符,允许从任何地方进行连接。我个人认为,这个带有通配符的版本更清楚地表明了所写内容是有意为之:

ssh -R *:2222:localhost:22 user@A

相关内容