因此,我管理着一堆机器,我为每台机器都设置了别名以便于访问。
对于 ssh 客户端配置中的每个人来说,这看起来像这样:
Host MACHINE-1075 M1075 m1075 1075
User service
HostName 10.0.100.75
并且:
Match User service
IdentityFile ~/.ssh/service_user
这使我只需键入即可ssh 1075
自动使用正确的身份文件和用户进入该机器。
这对于正常访问来说效果很好。然而,有时我可能需要以 root 身份登录来执行某些任务。我可以通过显式指定身份文件来完成此操作,例如ssh root@1075 -i ~/.ssh/root_user
.
这没关系,但我会真的我喜欢做的就是配置 SSH,从用户和主机的组合中找出所需的身份文件,从而允许我键入ssh root@1075
并执行正确的操作。我知道我可以匹配 root 用户的所有使用并将其链接到一个身份文件:
Match User root
IdentityFile ~/.ssh/root_user
然而,这不适用于我的情况,因为有几组机器可能需要不同的根访问凭据,因此并非所有机器都应该匹配。理想情况下,我想做的是:
Match Host 10.0.100.75 && Match User root
IdentityFile ~/.ssh/root_user
但这似乎不起作用。作为临时解决方案,我只是简单地为机器添加别名root-
作为前缀,这样我就可以这样做ssh root-1075
,这还不错,但它并不完全是我想要的。
这是在运行 OpenSSH 8.4 的 Ubuntu 21.10 上进行的。
答案1
恕我直言,在 中并不完全清楚man ssh_config
,但是匹配多个条件的语法似乎是
Match keyword [pattern|pattern-list] keyword [pattern|pattern-list]
其中模式 inpattern-list
以逗号分隔,但关键字模式对之间通过简单的空格分隔:
Match Host 10.0.100.75 User root
&&
不支持像这样的显式逻辑运算符,因为必须满足所有条件 - 逻辑AND
被理解。