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

Jac*_*ack 12 ssh ssh-tunnel

我有一个位于 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在目标机器上验证使用。