在 SSH 配置中同时匹配用户和主机

在 SSH 配置中同时匹配用户和主机

因此,我管理着一堆机器,我为每台机器都设置了别名以便于访问。

对于 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被理解。

相关内容