如何根据当前位置欺骗 ssh 使用不同的配置进行连接?

sor*_*rin 6 ssh

这是以下用例:想要ssh server1在 3 个场景中:

  • server1 在当前网络上,去吧
  • server1 不在当前网络上,您需要使用网关 (gw1) 来访问它,这不是一个大问题,因为您可以~/.ssh/config为此定义隧道
  • 您所在的网络不允许您访问第一个 gw1,因此您将使用 gw2。

期望的结果:能够使用相同的命令并能够连接到服务器。

pjm*_*rse 1

您已经暗示了解决方案,并且通过 dave4420 的附加提示,我感觉我发布答案是在作弊。

本质上,该ssh-config ProxyCommand指令解决了两种非本地情况下“如何连接”的问题。剩下的问题归结为“如何使用一个命令并忽略确定使用哪种情况的问题”。

  • 在 .ssh/config 文件中为以下三种情况定义一个主机昵称:主机 server1a、主机 server1b、主机 server1c。

  • 定义第四个昵称,它将是连接到该服务器的命令,始终为:Host server1。

  • 编写一个脚本来实现您在问题中定义的逻辑。我无法在这里对此进行伪代码,因为我不确定您将使用哪些测试来确定您处于三种情况中的哪一种。在所有三种情况下,您都可以使用 ssh 命令,例如ssh server1a。使用此脚本作为ProxyCommand第四个昵称。

现在根据上下文ssh server1进行代理。ssh server1[abc]

更多关于ProxyCommand愚蠢的 SSH 技巧