反向 ssh 隧道侦听错误的接口

反向 ssh 隧道侦听错误的接口

我正在使用防火墙后面的服务器。我已经建立了到互联网上的中间服务器的 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)了解更多信息。

相关内容