我想要访问私有网络上的几台非常相似的机器:,,A
。我已经配置了一个 JumpHost ,并设置了这些机器的配置以使用它:B
C
J1
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
并且想通过 或 连接到相同的机器J1
。J2
有没有办法编写配置文件,使得如果机器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"'