根据主机名前缀/后缀更改 SSH 跳转主机

根据主机名前缀/后缀更改 SSH 跳转主机

我想要访问私有网络上的几台非常相似的机器:,,A。我已经配置了一个 JumpHost ,并设置了这些机器的配置以使用它:BCJ1

Host J1
    HostName 123.123.123.123
    User ciprian

Host A B C
    HostName %h
    User ciprian
    ProxyJump J1
    LocalForward 8501 localhost:8501

现在我正在设置第二个 JumpHost,J2并且想通过 或 连接到相同的机器J1J2有没有办法编写配置文件,使得如果机器J1名称中包含 ,它会跳转到J1,或者如果它包含J2,它会跳转到J2?当然,无需手动指定精确匹配 :)

我可以像这样编写配置:

# ...
Host *-J1
    ProxyJump J1

Host *-J2
    ProxyJump J2

Host A* B* C*
    # --- Which Host name? ---
    User ciprian
    # ...

因此如果我给出ssh A-J1,它将拾取设置以跳过 J1。但是,当它解析与 相关的定义时A*,我无法再指定HostName,因为%h会解析为A-J1,而我希望它解析为A

我相信通过CanonicalizeHostName和可以实现一些魔法CanonicalizePermittedCNAMEs,但我不知道如何实现。

答案1

您可以使用 ProxyCommand 和一些小型 shell 脚本:

Host *-prefix1
   ProxyCommand ssh -q jump1 'H="%h"; nc ${H%%-prefix1} %p || echo "ProxyCommand failed! >&2"'

Host *-prefix2
   ProxyCommand ssh -q jump2 'H="%h"; nc ${H%%-prefix2} %p || echo "ProxyCommand failed! >&2"'

相关内容