使用远程机器上的多个 ProxyJump 和密钥进行 SSH 配置

使用远程机器上的多个 ProxyJump 和密钥进行 SSH 配置

我想仅使用一个 SSH 命令访问我的任何服务器。我的问题是,当我使用“ProxyJump”或“ProxyCommand”时,“IdentityFile”会在我的计算机上搜索密钥。

配置中是否有任何选项可以使用远程键进行下一次跳转?

我有从第二级服务器开始的普通用户,我们称他们为“secondadmin”和“thirdadmin”。目前,我可以使用两个 ssh 命令访问第三级服务器,如下所示:

myuser@first-server: ~/$ ssh -i ~/.ssh/id_rsa secondadmin@second-server
secondadmin@second-server: ~/$  ssh -i ~/.ssh/id_rsa thirdadmin@third-server

我想模拟上述行为,并且暂时不想在这些服务器上为每个人设置单独的用户。如果没有必要,我也不想将管理员的私钥复制到我或任何其他用户的机器上。

答案1

ProxyJump通过建立TCP 隧道通过代理从您的计算机到目标。然后它连接到本地隧道端点,从您的计算机到达目标计算机。与目标(或下一个代理)的连接从未最初从这些代理发起。

假设您有以下设置:

Host a
   ProxyJump b

Host b
   ProxyJump c

Host c
   ProxyJump d

当你运行时ssh a,它会执行以下操作,全部在本地机器(运行此命令的位置):

  1. 连接d并建立 TCP 隧道,比如说使用本地端口 11111 来c:22

  2. 连接到localhost:11111c:22,并从本地端口 22222 建立 TCP 隧道到b:22

  3. 连接到localhost:22222通向 b:22 的,并从本地端口 33333 建立到a:22

  4. 连接到localhost:33333,最终到达 a。

当然,实际端口将被随机选择。

您可以在建立连接后通过查看本地机器的连接表来观察这一点ss -npt,因此您将看到所有这些。

请注意,所有连接都是从客户端计算机建立的,因此所有中间主机的所有密钥都必须在本地计算机上可用。所有这些机器可能没有任何密钥来相互连接,因为它们实际上并没有建立相互之间的 SSH 连接,而只是建立隧道连接。

然而,防火墙必须至少允许以下操作:b允许a:22c允许b:22d允许c:22,并且必须允许您的计算机d:22

答案2

将密钥复制到初始服务器是唯一的方法,因为 IdentityFile 始终从建立第一个连接的服务器读取(也对跳数进行排序)。其他服务器只是用于为后续服务器提供正确访问源的节点。

相关内容