В чем разница между Host и HostName в конфигурации SSH?

В чем разница между Host и HostName в конфигурации SSH?

На странице руководства написано следующее:

Хозяин

Host Ограничивает следующие объявления (до следующего ключевого слова Host) только для тех хостов, которые соответствуют одному из шаблонов, указанных после ключевого слова. Если указано более одного шаблона, они должны быть разделены пробелом. Один `*' в качестве шаблона может использоваться для предоставления глобальных значений по умолчанию для всех хостов. Хост — это аргумент имени хоста, указанный в командной строке (т. е. имя не преобразуется в канонизированное имя хоста перед сопоставлением).

Запись шаблона может быть инвертирована путем добавления к ней восклицательного знака (`!'). Если инвертированная запись совпадает, то запись Host игнорируется, независимо от того, совпадают ли какие-либо другие шаблоны в строке. Поэтому инвертированные соответствия полезны для предоставления исключений для подстановочных совпадений.>

Более подробную информацию о шаблонах см. в разделе ШАБЛОНЫ.

Имя хоста

HostName Указывает реальное имя хоста для входа. Это может использоваться для указания псевдонимов или сокращений для хостов. Если имя хоста содержит последовательность символов `%h', то оно будет заменено на имя хоста, указанное в командной строке (это полезно для работы с неквалифицированными именами). По умолчанию используется имя, указанное в командной строке. Также разрешены числовые IP-адреса (как в командной строке, так и в спецификациях HostName).

Например, когда я хочу создать конфигурацию SSH для GitHub, какими должны быть 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вы на самом деле входите в системуhost1.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>"

Примечание: Технически страница man верна, просто она немного странно сформулирована. Я бы добавил еще несколько слов для ясности:HostName Specifies the real host name to log into. This can be used *TOGETHER WITH 'HOST'* to specify nicknames or abbreviations for hosts.

решение3

Недавно я хотел сделать что-то с хостом и именем хоста, но забыл точный синтаксис... но гугление было беспорядочным, а man-страница не слишком помогла. Так что, предполагая, что есть и другие, у кого такая же потребность, вот мои лакомые кусочки.

Host указывает аргумент командной строки и может рассматриваться как a) фактическое имя хоста/IP, b) сокращение, c) псевдоним. HostName — это реальное имя хоста/IP машины, к которой вы подключаетесь. В поле HostName вы можете использовать %h в качестве строки имени хоста, которую вы указываете в командной строке. (Это была та часть, которую я хотел использовать в своем примере.)

Итак, предположим, у вас есть набор хостов, где имя хоста начинается с my-proj-host-... и все они находятся в домене .my.proj.domain.com, и мне нужно войти на них, используя определенный ключ ssh my-proj-id-rsa и определенный идентификатор пользователя my-proj-user. Чтобы облегчить себе жизнь, я бы добавил следующее в файл ~/.ssh/config

Хост my-proj-host*

Имя хоста %h.my.proj.domain.com

Пользователь my-proj-user

Файл_идентификации ~/.ssh/my-proj-id-rsa

Теперь я могу ввести

ssh мой-proj-host-1234

Без конфигурации это было бы

ssh -i ~/.ssh/мой-proj-id-rsa[email protected]

экономия времени на наборе текста (и опечатках).

Связанный контент