![Windows 上的 OpenSSH 始终将用于远程转发的套接字绑定到 LOOPBACK](https://linux22.com/image/776742/Windows%20%E4%B8%8A%E7%9A%84%20OpenSSH%20%E5%A7%8B%E7%BB%88%E5%B0%86%E7%94%A8%E4%BA%8E%E8%BF%9C%E7%A8%8B%E8%BD%AC%E5%8F%91%E7%9A%84%E5%A5%97%E6%8E%A5%E5%AD%97%E7%BB%91%E5%AE%9A%E5%88%B0%20LOOPBACK.png)
正如标题所述。
主机 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