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