我的公司有三台独立的跳转主机。例如:jump1.example.com
、jump2.example.com
和jump3.example.com
所有内部服务器都必须通过这些跳转主机进行访问:
local ---> jump1.example.com ---> internal.example.com
我们有很多内部服务器,因此为了简化,我创建了一个配置文件,如下所示:
.ssh/配置:
Host jump1.example.com jump2.example.com jump3.example.com
ForwardAgent yes
ProxyCommand none
Host *.example.com
PubkeyAuthentication yes
User sbarnett
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
ProxyCommand ssh -q -W %h:%p jump1.example.com
请注意,我的公钥位于这些机器上,因此此设置完美运行。我可以输入ssh internal.example.com
,它将正确代理jump1.example.com
并通过我的私钥进行连接。
不过,我想做的是:我不想输入jump1.example.com
或internal.example.com
,而是只输入ssh jump1
或ssh internal
我知道这可以按主机进行配置,如下所示:
Host internal
HostName internal.example.com
PubkeyAuthentication yes
User sbarnett
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
ProxyCommand ssh -q -W %h:%p jump1.example.com
但是如果我尝试更简单的方法:
Host internal
HostName internal.example.com
*.example.com
然后,当我尝试使用时,我的通用配置选项(在下)不会被加载ssh internal
——所以它不使用代理,也不使用身份文件,从而阻止我连接。
有没有办法说“如果主持人姓名是*.example.com
(不一定是主持人)然后应用这些设置”?
当且仅当不存在时重定向*
到 的方法可获得加分(例如 - 当连接到 时,我不希望它重定向到)*.example.com
*
[email protected]
[email protected]
答案1
您正在寻找的选项是CanonicalizeHostname
。
如果您将这些添加到 .ssh/config 的顶部,ssh internal
将尝试将您的条目推测为 internal.example.com,如果成功,它将处理匹配Host *.example.com
。CanonicalDomains 行可以有多个条目,按顺序尝试。
CanonicalDomains example.com
CanonicalizeHostname yes