这与我在这里看到的其他 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。