ssh_config 中有多个“主机 *”?

har*_*pig 34 ssh openssh

我对 ~/.ssh/config 工作方式的理解是,每个 'Host' 行对配置文件中该点之后的任何主机匹配生效。

我有许多需要连接的个人服务器和工作服务器。我正在尝试执行以下操作:

# 通用设置
控制大师自动
控制路径 ~/.ssh/controlmaster/%r@%h:%p
ForwardAgent 是
ForwardX11 是
GSSAPI身份验证无
PubkeyAuthentication 是

# 个人服务器
主持人 *
用户 harleypig
IdentityFile ~/.ssh/personal_id_rsa

主机host1
主机名 host1.com

主机host2
主机名 host2.com

# 工作服务器
主持人 *
用户 alan.young
IdentityFile ~/.ssh/work_id_rsa

主持作品1
主机名 work1.companyserver.com

主机工作2
主机名 work2.companyserver.com

主持人 *
用户 devuser

主机 dev1
主机名 dev1.companyserver.com

主机 dev2
主机名 dev2.companyserver.com

文档似乎表明 host1 和 host2 应该使用“personal_id_rsa”和用户 harleypig。work1、work2、dev1 和 dev2 应使用“work_id_rsa”,前两个应为用户“alan.young”,而 dev1 和 dev2 应为用户“devuser”

然而,这并没有发生。无论我首先放置什么“主机 *”,都是以下所有主机尝试连接的。我是否误解或遗漏了什么?

Gil*_*il' 44

ssh_config手册

由于使用了每个参数的第一个获取值,因此应在文件开头附近给出更多特定于主机的声明,并在末尾给出一般默认值。

因此,在您的示例中,所有主机都将使用User harleypigand IdentityFile ~/.ssh/personal_id_rsa

Host带有通配符的指令视为后备:仅当尚未设置时才使用以下设置。你需要写这样的东西:

Host host1
Hostname host1.com
Host host2
Hostname host2.com
Host host*
User harleypig
IdentityFile ~/.ssh/personal_id_rsa
Run Code Online (Sandbox Code Playgroud)

Host如果一组给定的主机别名无法与通配符匹配,您可以在一行中放置多个模式,例如Host host* more* outlier.


Ham*_*han 19

你肯定做错了。

  • 您应该始终将其Host *作为最后一个条目。
  • 您不能有多个Host *条目

如果您的工作机器具有可以概括为仅针对工作机器的名称格式,例如:machine1.work.com、host.work.com、fileserver.work.com,那么您可以将工作机器定位为:

Host *.work.com
User alan.young
IdentityFile ~/.ssh/work_id_rsa
Run Code Online (Sandbox Code Playgroud)

这同样适用于您的个人机器。

  • @MincăDanielAndrei 它可以双向工作,它只是一个通配符表达式,您可以将它用作任何其他通配符。主机 git-codecommit.*.amazonaws.com 这是我的 ~/.ssh/config 中的一个工作示例 (4认同)
  • @HameedullahKhan那是错误的,你实际上可以有多个`Host *`,文档不是很清楚,但试试吧。 (4认同)