SSH 配置中 Host 和 HostName 有什么区别?

SSH 配置中 Host 和 HostName 有什么区别?

手册页是这样说的:

主持人

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.com
  • ssh 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[电子邮件保护]

节省一些打字时间(和错别字)。

相关内容