Кілька "Хост *" у ssh_config?


27

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

У мене є ряд персональних серверів та робочих серверів, до яких мені потрібно підключитися. Я намагаюся зробити щось подібне:

# Загальні налаштування
ControlMaster auto
ControlPath ~/.ssh/controlmaster/%r@%h:% p
ForwardAgent так
ВпередX11 так
GSSAPIAаутентифікація №
PubkeyAuthentication так

# Особисті сервери
Хост *
Користувач harleypig
IdentityFile ~ / .ssh / personal_id_rsa

Ведучий господар1
Ім'я хосту host1.com

Ведучий хост2
Ім'я хосту host2.com

# Робочі сервери
Хост *
Користувач alan.young
IdentityFile ~ / .ssh / work_id_rsa

Робота господаря1
Ім'я хосту work1.companyserver.com

Робота господаря2
Ім'я хосту work2.companyserver.com

Хост *
Користувач devuser

Ведучий dev1
Ім'я хосту dev1.companyserver.com

Хост dev2
Ім'я хосту dev2.companyserver.com

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

Однак цього не відбувається. Що б я не став "Хост *", я ставлю перше - це те, з чим намагаються зв'язатись усі наступні хости. Я щось нерозумію чи щось пропускаю?


Дякую, між обома цими відповідями я зміг налагодити свої зв’язки.
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 *на початку файлу, здається, працює нормально. Можливо, той факт, що ви використовуєте підстановку, підтверджує той факт, що це перший запис, коли ви надаєте їм пріоритет?
Заз

Btw, Host *.work.comневірний синтаксис. Це працює лише навпаки:Host myserver*
Даніель Андрій Мінка

3
@ MincăDanielAndrei працює обома способами, це просто виражене підкреслення, і ви можете використовувати його як будь-який інший підстановку. Хост git-codecommit. *. Amazonaws.com Це робочий приклад з мого ~ / .ssh / config
Хамедуллаха, хан

@HameedullahKhan серйозно, я спробував це, і він не відповідає. Якщо ви Host *subdomain.comце зробите, це не буде реагувати.
Даніель Андрій Мінка

1
@ MincăDanielAndrei Така поведінка задокументована на сторінках man, якщо вона не працює (для мене ні), це помилка.
goetzc
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.