手册页是这样说的:
主持人
Host 限制以下声明(直到下一个 Host 关键字)仅适用于与关键字后给出的模式之一匹配的主机。如果提供了多个模式,则应以空格分隔它们。可以使用单个 `*' 作为模式来为所有主机提供全局默认值。主机是命令行上给出的主机名参数(即,在匹配之前,名称不会转换为规范化的主机名)。
可以通过在模式条目前添加感叹号 (`!') 来否定该条目。如果否定条目匹配,则无论该行上是否有其他模式匹配,都会忽略主机条目。因此,否定匹配对于提供通配符匹配的例外情况很有用。>
有关模式的更多信息,请参阅 PATTERNS。
主机名
HostName 指定要登录的真实主机名。这可用于指定主机的昵称或缩写。如果主机名包含字符序列“%h”,则它将被替换为命令行上指定的主机名(这对于处理非限定名称很有用)。默认值是命令行上给出的名称。数字 IP 地址也是允许的(在命令行和 HostName 规范中)。
例如,当我想为 GitHub 创建一个 SSH 配置时,Host 和 HostName 应该分别是什么?
答案1
对于 github.com 你~/.ssh/config
可能看起来像这样
Host github.com
IdentityFile ~/.ssh/key_name_for_github
对于主机名:正如 man 所说,它允许您指定主机的缩写。例如,如果您~/.ssh/config
看起来像这样
Host host1
HostName host1.example.com
Host host2
HostName anotherdomain.com
然后当你输入
ssh host1
你实际上登录主机1.example.comssh host2
登录到anotherdomain.com
答案2
简单用法:
Host
是实际的主机名,并且没有HostName
或者
Host
是主机的昵称 &HostName
是实际主机名。
简单示例:
$ cat ~/.ssh/config
Host dev
Hostname <hostname>
User <username>
IdentityFile <path_to_private_key>
$ ssh dev
# Equivalent to "ssh -i <path_to_private_key> <username>@<hostname>"
注意:手册页从技术上来说是正确的,只是措辞有点奇怪。为了清楚起见,我想再加几句话:HostName Specifies the real host name to log into. This can be used *TOGETHER WITH 'HOST'* to specify nicknames or abbreviations for hosts.
答案3
我最近想对主机和主机名做一些事情,但忘记了确切的语法……但在谷歌上搜索很乱,手册页也没什么用。所以,假设其他人也有同样的需求,以下是我的一些建议。
Host 指定命令行参数,可以被认为是 a) 实际主机名/IP,b) 简写,c) 别名。HostName 是您要连接的机器的真实主机名/IP。在 HostName 字段中,您可以使用 %h 作为您在命令行上指定的主机名字符串。(这是我想要在我的示例中使用的部分。)
因此,假设您有一组主机,其主机名以 my-proj-host-... 开头,并且它们都在域 .my.proj.domain.com 中,我需要使用特定的 ssh 密钥 my-proj-id-rsa 和特定的用户 ID my-proj-user 登录它们。为了让我的生活更轻松,我将以下内容添加到 ~/.ssh/config 文件中
主机 my-proj-host*
主机名 %h.my.proj.domain.com
用户 my-proj-user
身份文件 ~/.ssh/my-proj-id-rsa
现在我可以输入
ssh 我的项目-主机-1234
如果没有配置,那将是
ssh -i ~/.ssh/我的项目 ID-rsa[电子邮件保护]
节省一些打字时间(和错别字)。