以下是用例:想要ssh server1
在 3 种情况下:
- server1 在当前网络上,继续
- server1 不在当前网络上,您需要使用网关 (gw1) 来访问它,这不是什么大问题,因为您可以使用
~/.ssh/config
它来定义隧道 - 您所在的网络不允许您访问第一个 gw1,因此您将使用 gw2。
期望结果:能够使用相同的命令并能够连接到服务器。
答案1
您已经暗示了解决方案,并且通过 dave4420 的额外提示,我感觉我通过发布答案作弊了。
本质上,该ssh-config
ProxyCommand
指令解决了两个非本地情况的“如何连接”问题。剩下的问题归结为“如何使用一个命令,而忽略确定使用哪种情况的问题”。
在您的 .ssh/config 文件中为这三种场景分别定义一个主机昵称:Host server1a、Host server1b、Host server1c。
定义第四个昵称,它将是您连接此服务器的命令,始终为:Host server1。
编写一个脚本来实现您在问题中定义的逻辑。我无法在此处对此进行伪编码,因为我不确定您会使用哪些测试来确定您处于这三种情况中的哪一种。在这三种情况下,您都有一个 ssh 命令可供使用,例如
ssh server1a
。将此脚本用作ProxyCommand
第四个昵称的。
现在根据上下文ssh server1
来获取代理。ssh server1[abc]
更多ProxyCommand
信息愚蠢的 SSH 技巧。