将两个 SSH 连接中继到一起

将两个 SSH 连接中继到一起

我有三台机器:

  1. 我有物理访问权限localhost
  2. 我想通过 ssh 进入host1。但是,它位于运营商级 NAT 后面,因此我无法从 ssh 直接进入localhost
  3. relayhost是为了帮助我从 连接localhosthost1

我想要从每个localhosthost1到ssh relayhost,然后将relayhost我的 ssh 连接从localhost中继到host1

这个答案建议我如果知道 的 URI 或 IP 地址,就可以在relayhost使用上创建隧道。但是,由于运营商级 NAT,我不知道这一点。因此,我可以想象一个像这样中继的过程:ssh -Lhost1

  1. host1ssh user@relayhost
  2. relayhost正在监视此连接,当它看到时,它会说“我将从我的端口 9999 创建一个到此连接的隧道”
  3. localhostssh 9999:relayhost

这是正确的做法吗?我该如何进行第 2 步?

答案1

您不需要在 上设置任何专门的触发器relayhost。您需要做的就是使用 进行远程端口转发,ssh -R而不是使用 进行本地端口转发ssh -L

现在,如果我理解正确的话,您的问题是 和 都localhost没有可公开访问的 IP,两者都位于 NAT 之后。否则,创建从到的隧道,然后在该隧道内运行第二个 SSH 连接host1会更容易。host1localhostssh -R

如果我们必须使用中继,可以按照以下步骤进行。为了清楚起见,让我们将您的localhost机器重命名为myhostnow。

  1. 运行此命令host1

    ssh -R 12345:localhost:22 user@relayhost
    

    这将打开端口12345relayhost当有人连接到它时,数据将被转发到22上的SSH 端口host1

  2. 现在您可以从 连接到12345端口。relayhostmyhost

    ssh user@relayhost -p 12345
    

    如果您有限制性防火墙relayhost禁止外部访问端口12345,则可以使用本地端口转发在本地打开端口myhost

    ssh -N -L 56789:localhost:12345 user@relayhost
    

    然后连接host1myhost

    ssh user@localhost -p 56789
    

但是不要指望在远程端口转发上构建任何永久的网络解决方案(请参阅:https://serverfault.com/q/595323以防将来可能出现的问题)。您应考虑使用开启服务器的 VPN 进行relayhost长期设置。

相关内容