我有一台远程且位于 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
在目标机器上进行验证。