为反向隧道+本地转发创建 ssh 配置

std*_*ass 3 ssh ssh-tunneling port-forwarding

我正在尝试为以下场景创建 ~/.ssh/config 条目:

我在某个地方的专用网络中有一个linux盒子,一个可以从任何地方访问的vps服务器和我的本地macbook

Linux 盒子位于防火墙后面,但我仍然应该能够从本地 MacBook 通过 SSH 进入该盒子。


我当前有效的解决方案如下:

Linux 盒子通过以下方式启动到 vps 的反向隧道:

ssh -R 15000:localhost:22 vps-user@vps
Run Code Online (Sandbox Code Playgroud)

然后从我本地的 macbook 通过以下方式启动通往 vps 的隧道:

ssh -L 12345:localhost:1500 vps-user@vps
Run Code Online (Sandbox Code Playgroud)

然后我启动另一个 ssh 命令,从那里我可以直接 ssh 进入 linux 盒子,否则它会隐藏在防火墙等后面:

ssh linuxbox-user@localhost -p 12345
Run Code Online (Sandbox Code Playgroud)

首先,这一切都非常可靠(如果你有任何更简单的方法来做到这一点,请告诉我 - 在 MacBook 方面这似乎相当麻烦)。

在最好的情况下,我将如何创建 ~/.ssh/config 条目,只需编写:

ssh linuxbox
Run Code Online (Sandbox Code Playgroud)

就这样结束了吗?

我尝试过使用LocalForward选项,它至少允许我为ssh -L ...命令创建别名,但它仍然需要第二个 ssh 命令。

我也尝试过ProxyCommand选项,但没有运气,也许只是配置错误?

fra*_*san 5

最简单的方法可能是避免本地转发(这在您的情况下似乎是不必要的),并利用该ProxyJump指令,它允许您指定一个或多个跳转代理(即您连接到的一个或多个中间主机)您的目标主机)。

您将需要两个连接:

  1. 您已经建立的从 Linux 主机到 vps 的远程转发:

    ssh -R 15000:localhost:22 vps-user@vps
    
    Run Code Online (Sandbox Code Playgroud)

    我假设您可以连接到端口上的 vps 22(正如您的问题中所暗示的那样)。
    这将使 vps 将其在端口上收到的连接转发15000到您的 Linux 盒子的端口22

  2. 从本地 MacBook 到 vps 的连接:

    ssh -J vps-user@vps -p 15000 linuxbox-user@localhost
    
    Run Code Online (Sandbox Code Playgroud)

    -J是指定指令的快捷方式ProxyJump(请参阅 的手册页ssh(1))。
    同样,这意味着您可以连接到端口 上的 vps 22
    此命令会将您的本地 MacBook 连接到22vps 上的端口,然后从那里连接15000到同一 vps 上的端口(linux 盒子正在监听),让您无需进一步连接即可登录到您的 linux 盒子。

相应的.ssh/config文件将是:

如果您正在使用公钥身份验证(正如您可能正在做的那样,至少允许远程转发的无人值守设置),您还可以将该指令添加IdentityFile到两个.ssh/config文件中,以消除输入密码的需要。


如果满足某些条件,您也许还可以直接将本地 MacBook 连接到15000vps 上的端口,从而无需本地转发或代理跳转。即,条件是:

  1. vps 上的端口15000没有被防火墙过滤。

  2. 您在 vps 上设置 的配置(通常在 中GatewayPorts yes)。 此设置默认为并确定远程转发是否可以将侦听端口绑定到除环回端口之外的其他地址(因此,IP 地址不是或)。请参阅手册页以获取更多信息。sshd/etc/ssh/sshd_config
    no127.0.0.1::1sshd_config(5)

在这种情况下,您只需要这两个命令:

  1. 从你的linux机器到vps的反向转发(注意*:前面的远程端口,它代表“监听任何地址”):

    ssh -R *:15000:localhost:22 vps-user@vps
    
    Run Code Online (Sandbox Code Playgroud)
  2. 从 MacBook 到 vps 的简单连接:

    ssh -p 15000 -l linuxbox-user vps
    
    Run Code Online (Sandbox Code Playgroud)

其翻译成以下.ssh/config文件:

但请注意,这样您会将您的 linux 机器暴露在互联网上,这很可能是您不想要的。