19

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

хозяин

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

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

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

HostName

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

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

3 ответа3

13

Для 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
5

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

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 Указывает реальное имя хоста для входа.Это можно использовать ВМЕСТЕ С 'ХОСТОМ', чтобы указать псевдонимы или сокращения для хостов.

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .