多台主机之间的 SSH 隧道

多台主机之间的 SSH 隧道

这与我在这里看到的其他 SSH 问题略有不同,所以就在这里。我有一个复杂的设置来访问网络应用程序,不幸的是没有办法解决它。以下是所涉及的场景和系统(由于显而易见的原因,IP 地址已匿名):

System Alpha
System Bravo
System Charlie
System Delta

我需要从 System Alpha 与 System Delta 可用的网站进行通信。问题是,我无法直接与 System Delta 交谈。目前,我可以通过 SSH 连接到 System Bravo,并且可以利用代理命令通过 SSH 连接到 System Charlie,该代理命令利用 System Bravo 作为代理。为了说明这一点,这是我的 SSH 配置:

Host system.bravo
  User bob
  Hostname 1.1.1.1
  ForwardAgent yes

Host system.charlie
  User bob
  ForwardAgent yes
  ProxyCommand ssh -q system.bravo nc localhost 1081

System Alpha 可以通过这种方式访问​​ System Charlie,因为它在端口 1081 上创建了一条到 System Bravo 的反向 SSH 隧道。这样做是因为 System Bravo 和 System Charlie 之间的防火墙仅允许 SSH 出站到 System Bravo。我知道这很烦人,但这是客户的要求。

系统 Charlie 可以毫无问题地通过 SSH 访问系统 Delta。我的问题是,如何通过 SSH 设置可用的 SOCKS 代理,以便 System Alpha 可以访问只能从 System Delta 访问的网站。通常我会这样做:

ssh -2 -C -D 4001 -L 4002:localhost:4002 -L 4003:localhost:4003 [email protected]
ssh -2 -C -D 4002 -L 4003:localhost:4003 [email protected]
ssh -2 -C -D 4003 [email protected]

然后我只需将 Firefox 指向 localhost:4003,这将是我访问该网站的工作代理。然而,由于系统 Bravo 和系统 Charlie 之间的奇怪设置,这将不起作用。 ***有人向我指出,显示通信的图表会让这变得更容易。所以这里是:

A full list of possible connections:
     ----->      --X-->       ----->
Alpha       Bravo      Charlie      Delta
     <--X--      <-----       <--X--

The connection between Alpha and Bravo and Charlie as it is currently 
configured:

     ProxyCommand ssh -q system.bravo nc localhost 1081
     -------------------------------------------------->      
Alpha    Bravo <---------------------------------------- Charlie
                      AUTOSSH -R 1081:localhost:22 

-----> = An allowed connection via SSH
--X--> = A blocked connection, only reverse SSH possible

有谁有解决方案告诉我如何完成此任务,同时记住系统 Bravo 和系统 Charlie 之间所需的代理命令和反向 SSH 隧道?

非常感谢

PS:我希望我的图表能有所帮助,抱歉这不是真实的图像

答案1

看起来如果你可以(从 A)ssh 到 C,你可以这样做:

user@Alpha:~$ ssh -L1234:localhost:1234 Charlie
user@Charlie:~$ ssh -Dlocalhost:1234 Delta

...此时,您可以让 Firefox 使用 localhost:1234 作为 SOCKS 代理。本地 SSH 将通过隧道将其代理到 C,其中 ssh 作为 SOCKS 服务器进行侦听并将其转发到 D。

但实际上,我会反对你的客户:如果他们希望你从 A 访问站点,他们应该提供一个合理的方法来做到这一点。例如VPN。

相关内容