ssh_config中有多个“主机*”?


27

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

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

# 通用设置
ControlMaster自动
ControlPath ~/.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”

但是,这没有发生。无论我首先输入的“主机*”是以下所有主机尝试连接的主机。我是误会还是错过了什么?


谢谢,在这两个答案之间,我能够使我的连接正常工作。
harleypig 2011年

Answers:


36

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


15

您肯定做错了。

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

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

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

同样适用于您的个人计算机。


对我来说,放在Host *文件开头似乎很好。也许您在使用通配符这一事实胜过了在确定通配符优先级时首先输入通配符的事实?
Zaz

顺便说一句,Host *.work.com是无效的语法。它只能以相反的方式起作用:Host myserver*
Daniel AndreiMincă17年

3
@MincăDanielAndrei它可以双向工作,它只是一个通配符表达式,您可以将其用作任何其他通配符。主机git-codecommit。*。amazonaws.com这是我的〜/ .ssh / config中的一个有效示例
Hameedullah Khan

@HameedullahKhan认真,我已经尝试过了,但没有回应。如果您这样做Host *subdomain.com,将无法回应。
Daniel AndreiMincă17年

1
@MincăDanielAndrei该行为记录在手册页中,如果它不起作用(对我而言也不起作用),则是一个错误。
goetzc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.