ssh_config 中有多个“主机 *”?

ssh_config 中有多个“主机 *”?

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

我有许多需要连接的个人服务器和工作服务器。我正在尝试做类似以下的事情:

# 常规设置
控制大师汽车
ControlPath ~/.ssh/controlmaster/%r@%h:%p
转发代理 是
ForwardX11 是
GSSAPI 身份验证 否
公钥认证 是

# 个人服务器
主持人 *
用户 harleypig
身份文件 ~/.ssh/personal_id_rsa

主机主机1
主机名 host1.com

主机主机2
主机名 host2.com

# 工作服务器
主持人 *
用户 alan.young
身份文件 ~/.ssh/work_id_rsa

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

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

主持人 *
用户 devuser

主机开发1
主机名 dev1.companyserver.com

主机开发2
主机名 dev2.companyserver.com

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

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

答案1

来自ssh_config手动的:

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

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

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

Host host1
Hostname host1.com
Host host2
Hostname host2.com
Host host*
User harleypig
IdentityFile ~/.ssh/personal_id_rsa

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

答案2

你肯定做错了。

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

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

Host *.work.com
User alan.young
IdentityFile ~/.ssh/work_id_rsa

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

相关内容