На странице руководства написано следующее:
Хозяин
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.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>"
Примечание: Технически страница 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]
экономия времени на наборе текста (и опечатках).