Несколько 'Host *' в ssh_config?

27

Я понимаю, как работает ~ / .ssh / config, что каждая строка 'Host' вступает в силу для любого хоста, соответствующего после этой точки в файле конфигурации.

У меня есть несколько личных серверов и рабочих серверов, к которым мне нужно подключиться. Я пытаюсь сделать что-то вроде следующего:

# Общие настройки
ControlMaster auto
ControlPath ~/.ssh/controlmaster/%r@%h:% p
ВпередАгент да
ForwardX11 да
GSSAPIAАутентификация нет
PubkeyAuthentication да

# Персональные серверы
Хост *
Пользователь harleypig
IdentityFile ~ / .ssh / personal_id_rsa

Host host1
Имя хоста host1.com

Host host2
Имя хоста host2.com

# Работа серверов
Хост *
Пользователь alan.young
IdentityFile ~ / .ssh / work_id_rsa

Host work1
Имя хоста work1.companyserver.com

Host work2
Имя хоста work2.companyserver.com

Хост *
Пользователь devuser

Host dev1
Имя хоста dev1.companyserver.com

Host dev2
Имя хоста dev2.companyserver.com

Документы, кажется, указывают, что host1 и host2 должны использовать 'personal_id_rsa' и пользователя harleypig. work1, work2, dev1 и dev2 должны использовать 'work_id_rsa', и первые два должны быть пользователем 'alan.young', а dev1 и dev2 должны быть пользователем 'devuser'

Однако этого не происходит. Что бы я ни указывал на «Host *», это то, с чем пытаются соединиться все следующие хосты. Я недоразумение или что-то упустил?

harleypig
источник
Спасибо, между этими двумя ответами я смог установить свои связи.
Harleypig

Ответы:

36

Из ssh_configруководства :

Поскольку для каждого параметра используется первое полученное значение, в начале файла должны быть приведены более специфичные для хоста объявления, а в конце общие значения по умолчанию.

Так что в вашем примере все хосты будут использовать User harleypigи IdentityFile ~/.ssh/personal_id_rsa.

Думайте о Hostдирективах с подстановочными знаками как о запасных: используйте следующие настройки, только если они еще не установлены. Вам нужно написать что-то вроде этого:

Host host1
Hostname host1.com
Host host2
Hostname host2.com
Host host*
User harleypig
IdentityFile ~/.ssh/personal_id_rsa

Вы можете поместить несколько шаблонов в Hostстроку, если данный набор псевдонимов хоста не может быть сопоставлен с подстановочными знаками, например Host host* more* outlier.

Жиль "ТАК - перестань быть злым"
источник
15

Вы определенно делаете это неправильно.

  • Вы должны всегда ставить Host *в качестве последней записи.
  • Вы не можете иметь несколько Host *записей

Если у ваших рабочих машин есть формат имени, который вы можете обобщить для нацеливания только на рабочие машины, например, для: machine1.work.com, host.work.com, fileserver.work.com, тогда вы можете настроить свою рабочую машину как:

Host *.work.com
User alan.young
IdentityFile ~/.ssh/work_id_rsa

То же самое относится и к вашим личным машинам.

Хамидулла Хан
источник
Для меня, положить Host *в начале файла, кажется, работает нормально. Возможно, тот факт, что вы используете подстановочный знак, превосходит тот факт, что это первая запись при назначении им приоритета?
Заз
Кстати, Host *.work.comэто неверный синтаксис. Это работает только наоборот:Host myserver*
Даниэль Андрей Mincă
3
@ MincăDanielAndrei, он работает в обоих направлениях, это просто подстановочное выражение, и вы можете использовать его как любой другой подстановочный знак. Хост git-codecommit. *. Amazonaws.com Это рабочий пример из моего ~ / .ssh / config
Хамидулла Кхан
@HameedullahKhan серьезно, я попробовал это, и он не отвечает. Если вы это сделаете, Host *subdomain.comон не будет отвечать.
Даниэль Андрей Mincă
1
@ MincăDanielAndrei Такое поведение задокументировано на страницах руководства, и если оно не работает (для меня тоже), это ошибка.
goetzc