В чем разница между Host и HostName в SSH Config?

23

Страница руководства говорит это:

хозяин

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

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

Смотрите PATTERNS для получения дополнительной информации о шаблонах.

HostName

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

Например, когда я хочу создать SSH Config для GitHub, какими должны быть соответственно Host и HostName?

TheFooProgrammer
источник
3
По сути: Hostэто строка, которую пользователь дает в качестве ввода в CLI при вызове SSH; HostNameэто строка, которую клиент SSH будет выводить по сети при попытке подключения к серверу.
Сампаблокупер

Ответы:

15

Для 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
ИНТ
источник
Я предполагаю, что вы имели в виду «Hostname» вместо «Host» во втором ~/.ssh/configпримере?
Дейв
6

В простом использовании:

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.

mblakesley
источник
1

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

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

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

Host my-proj-host *

HostName% h.my.proj.domain.com

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

IdentityFile ~ / .ssh / my-proj-id-rsa

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

ssh my-proj-host-1234

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

ssh -i ~ / .ssh / my-proj-id-rsa my-proj-user@my-proj-host-1234.my.proj.domain.com

сэкономив немного печатать (и опечатки).

Маркус Ю
источник