我对 ~/.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
由于使用每个参数的第一个获得的值,因此应在文件开头附近给出更多特定于主机的声明,并在末尾给出一般默认值。
因此,在您的示例中,所有主机都将使用User harleypig
和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
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
这同样适用于您的个人机器。