通过隧道进行 SSH 访问

通过隧道进行 SSH 访问

我有以下设置,

机器 A(Windows 10 并连接到 ISP(X))和机器 B(Windows 10 并连接到 ISP(Y))。这两台机器(A 和 B)都没有任何直接连接。机器 A 可以访问机器 C(在云端运行 RHEL 的 Linux Box),同样,机器 B 也可以访问机器 C。

现在将机器 C 作为隧道,是否可以从机器 A 访问在机器 B(VirtualBox 内部)中运行的 Linux 机器(Ubuntu)?如果可以,我们该怎么做?我猜这可以通过反向 ssh 隧道实现,但不确定步骤。

为了给出更多的想法,设置如下所示

                                   PUBLIC IP        SSH (Putty) (Machine C)
Machine A Windows 10 (192.168.1.2) --> ISP(49.xxx.xxx.xxx) ---> (34.xxx.xx.xxx)

                                 PUBLIC IP          SSH (Putty)  (Machine C)
Machine B Windows 10 (192.168.1.15) --> ISP(216.xxx.xxx.xxx) --->(34.xxx.xx.xxx)

Machine B Windows 10 (192.168.1.15) --> Virtual Box (192.168.1.100)

现在我想从机器 A 访问 192.168.1.100(ubuntu 机器),我该如何实现?只有一台机器(机器 C)可供机器 A 和机器 B 访问。有没有办法进行一些隧道传输并从机器 A 访问 192.168.1.100?

注意:我无法访问路由器来进行转发。因此我必须通过建立隧道来实现这一点。

答案1

应该可以。我可以提供 Linux 命令,您必须查找在 Windows 上使用的 SSH 客户端的等效配置。

从VM到B:

ssh -R localhost:2022:localhost:22 192.168.1.15

这会将 Ubuntu VM 上的端口 22(大概是 SSH)转发到 192.168.1.15 上的端口 2022。

从B到C:

ssh -R localhost:3022:localhost:2022 34.xxx.xx.xxx

这会将localhost:2022(其本身是由 VM 中运行的上一个命令转发的)转发到 C 上的 3022。

从A到C:

ssh -L 4022:localhost:3022 34.xxx.xx.xxx

这会将localhost:3022C 上的转发至 A 的 4022。

因此我们有一个转发链:

  • 4022 上 A 至
  • 3022 在 C 上
  • 2022 年 B 至
  • 虚拟机上 22

最后,关于 A:

ssh localhost:4022

这应该连接到虚拟机。

  • -L位于LocalForwardssh_config
  • -RRemoteForward

此链可以缩短。例如,根据所涉及的网络设置,您可以从 B 到 C 执行:

ssh -R :3022:192.168.1.15:22 34.xxx.xx.xxx

B 会直接将 C 上的 3022 转发到虚拟机上的 22。而在 A 上:

ssh 34.xxx.xx.xxx:3022

相关内容