我正在使用防火墙后面的服务器。我已经建立了到互联网上的中间服务器的 ssh 隧道,如下所示:
remoteuser@behind_fw$ ssh -N -f -R 10002:localhost:22 middleuser@middle
但我无法直接通过该服务器连接,这不起作用:
user@local$ ssh remoteuser@middle -p 10002
我必须分两步进行连接:
user@local$ ssh middleuser@middle
middleuser@middle$ ssh remoteuser@localhost -p 10002
netstat -l
中间的输出:
tcp 0 0 localhost:10002 *:* LISTEN
但它应该是这样的:
tcp 0 0 *:10002 *:* LISTEN
我怎样才能做到这一点?
答案1
这是在远程服务器上打开的隧道,该服务器需要具有网关端口设置是的在其 /etc/ssh/sshd_config 中。
根据服务器的用户类型,你可能想要使用匹配选项将该功能限制给您的用户。
Match User middleuser
GatewayPorts yes
请注意,您可能需要在 sshd_config 的末尾添加这个 Match 块,因为 Match 块会一直持续,直到另一个 Match 块开始或文件结束。
话虽如此,那么我们不妨尝试一下我认为更干净的解决方案怎么样?
user@local$ ssh -N -f -L 10002:behind_fw:22 middleuser@middle
user@local$ ssh remoteuser@localhost -p 10002
答案2
假设您正在使用 OpenSSH,则需要指定绑定地址。尝试以下操作:
ssh -N -f -R *:10002:localhost:22 middleuser@middle
或者
ssh -N -f -R :10002:localhost:22 middleuser@middle
-R 的签名是:
-R [bind_address:]port:host:hostport
在 OpenSSH 上。出于安全原因,如果您不指定它,则默认为 localhost。您可能需要更改 GatewayPorts 才能使其工作,具体取决于您的配置。请参阅SSH(1)了解更多信息。