ssh -R 使目标主机在所有接口上接受连接

ssh -R 使目标主机在所有接口上接受连接

我有一台远程且位于 NAT 后面的 SOURCE 主机。我想从我家庭网络中的 TARGET 主机通过 ssh 连接到 SOURCE。因此,我在 SOURCE 上发出以下命令:

ssh -R 2222:localhost:22 TARGET -N

现在我可以通过 来从 TARGET 连接到 SOURCE ssh -p 2222 localhost。很好

当 TABLET 与 TARGET 位于同一网络中时,我期望它能够正常工作:

ssh -p 2222 TARGET

相反,TARGET 似乎只接受来自本地主机的 2222 端口的连接。TARGET 上的情况如下:

user@TARGET:~/$ netstat -l | grep 2222
tcp        0      0 localhost:2222          *:*                     LISTEN     
tcp6       0      0 localhost:2222          [::]:*                  LISTEN 

有没有办法让远程端ssh -R接受来自其所有接口的连接?

答案1

0.0.0.0默认情况下,它只会监听 localhost(环回接口)。您需要在命令中指定 bind_address :

ssh -R 0.0.0.0:2222:localhost:22 TARGET -N

您还需要在目标主机上配置 SSH 守护程序以允许客户端指定 bind_address。默认情况下禁止监听所有接口。因此,即使您指定0.0.0.0为 bind_address,您也总会发现它在环回上监听。

您需要有如下一行来/etc/ssh/sshd_config允许客户端指定绑定地址。

GatewayPorts clientspecified

完成后,您可以netstat -lntp在目标机器上进行验证。

相关内容