我有一个位于 NAT 后面的远程主机。我想通过 ssh 从我家庭网络中的 TARGET 主机连接到 SOURCE。因此,我在 SOURCE 上发出以下命令:
ssh -R 2222:localhost:22 TARGET -N
Run Code Online (Sandbox Code Playgroud)
现在从 TARGET 我可以通过ssh -p 2222 localhost. 美好的
在 TARGET 的同一网络中使用平板电脑,我希望这能正常工作:
ssh -p 2222 TARGET
Run Code Online (Sandbox Code Playgroud)
相反,它看起来像 TARGET 只接受来自本地主机的端口 2222 上的连接。以下是关于 TARGET:
user@TARGET:~/$ netstat -l | grep 2222
tcp 0 0 localhost:2222 *:* LISTEN
tcp6 0 0 localhost:2222 [::]:* LISTEN
Run Code Online (Sandbox Code Playgroud)
有没有办法让远程端ssh -R接受来自其所有接口的连接?
Kha*_*led 14
默认情况下,它只会监听本地主机(环回接口)。您需要0.0.0.0在命令中指定 bind_address :
ssh -R 0.0.0.0:2222:localhost:22 TARGET -N
Run Code Online (Sandbox Code Playgroud)
您还需要在目标主机上配置 SSH 守护程序以允许客户端指定 bind_address。默认禁止监听所有接口。因此,即使您指定0.0.0.0为 bind_address ,您也会发现它一直在监听环回。
您需要有如下一行/etc/ssh/sshd_config以允许客户端指定绑定地址。
GatewayPorts clientspecified
Run Code Online (Sandbox Code Playgroud)
完成后,您可以netstat -lntp在目标机器上验证使用。