Кілька подібних записів у ssh config


193

Скажіть, я хочу налаштувати свої sshпараметри для 30 серверів з однаковою установкою у моєму .ssh configфайлі:

host XXX
     HostName XXX.YYY.com
     User my_username
     Compression yes
     Ciphers arcfour,blowfish-cbc
     Protocol 2
     ControlMaster auto
     ControlPath ~/.ssh/%r@%h:%p
     IdentityFile ~/.ssh/YYY/id_rsa

де єдине, що змінюється між цими 30 машинами XXX.

Замість того, щоб повторити вищезазначену структуру в моєму configфайлі 30 разів , чи є інший спосіб визначення кола машин?

Відповіді:


232

На ssh_config(5)чоловіковій сторінці:

 Host    Restricts the following declarations (up to the next Host key‐
         word) to be only for those hosts that match one of the patterns
         given after the keyword.  If more than one pattern is provided,
         they should be separated by whitespace.

...

 HostName
         Specifies the real host name to log into.  This can be used to
         specify nicknames or abbreviations for hosts.  If the hostname
         contains the character sequence ‘%h’, then this will be replaced
         with the host name specified on the commandline (this is useful
         for manipulating unqualified names).

Тому:

Host XXX1 XXX2 XXX3
  HostName %h.YYY.com

9
Здається, %hфункція з'явилася у версії 5.6 OpenSSH . Мені було цікаво, чому я його раніше не бачив - версія в Debian Squeeze становить 5,5.
jw013

2
Якщо ви працюєте на старій ОС або потребуєте правил, які не підтримуються config, ви завжди можете просто написати простий сценарій, який генерує ваш config.
Роджер Дал

69

Щоб мінімізувати налаштування, ви можете мати .ssh/configподібний

Host X01
    HostName X01.YYY.com

Host X02
    HostName X02.YYY.com

...

Host X01 X02 ...
     User my_username
     Compression yes
     Ciphers arcfour,blowfish-cbc
     Protocol 2
     ControlMaster auto
     ControlPath ~/.ssh/%r@%h:%p
     IdentityFile ~/.ssh/YYY/id_rsa

Host X01 X02 ...може бути замінено, Host *якщо кожен хост має таку конфігурацію


2
Це здається єдиною відповіддю, яка насправді допомагає ОП (і я сам).
Божевільний фізик

Яке пріоритетне замовлення? Це лише речі, визначені пізніше у файлі, переосмислюють речі, визначені раніше у файлі? Скажімо, у мене було "Не стиснення" під "Host X01", чи буде це тоді перемінено "Стиснення так" під "Host X01 X02"?
Бен Фармер

1
З посібника по ssh_config: Оскільки використовується перше отримане значення для кожного параметра, слід наводити більш специфічні для хоста декларації біля початку файлу та загальні параметри за замовчуванням в кінці.
Гійом Вінсент

Можна Host X01 X02 ...замінити *.YYY.com? Це здається трохи більш керованим, якщо це працює.
Майкл

51

Просто використовуйте *

Дивіться man ssh_config:

PATTERNS Шаблон складається з нуля або більше символів, що не містять пробілів, '*' (підстановочний знак, який відповідає нулю або більше символів) або '?' (підстановочний знак, який відповідає точно одному символу). Наприклад, щоб вказати набір декларацій для будь-якого хоста в наборі доменів ".co.uk", може бути використаний такий шаблон:

       Host *.co.uk

 The following pattern would match any host in the 192.168.0.[0-9] network range:

       Host 192.168.0.?

 A pattern-list is a comma-separated list of patterns.  Patterns within pattern-lists may be negated by preceding them with an
 exclamation mark (‘!’).  For example, to allow a key to be used from anywhere within an organisation except from the “dialup”
 pool, the following entry (in authorized_keys) could be used:

       from="!*.dialup.example.com,*.example.com"

Дякую! Це, здається, те, що мені потрібно, але я все ще не розумію, як адаптувати його до моєї справи. Чи використовую я знак питання ?там, де я хочу, щоб його замінили візерунок, відповідний *знаку?
Амеліо Васкес-Рейна

2
Хм. Я думаю, що візерунки служать іншій цілі, ніж мені потрібно. Вони переспрямовують кілька запитів на один і той же configзапис, але параметри Хоста є фіксованими (тобто шаблони не можна використовувати для шаблонування параметрів). Я помиляюся?
Амеліо Васкес-Рейна

4
@ user27915816 Так, ви праві, наскільки я знаю, немає ніяких способів зробити "шаблони". Найкраще, що ви можете зробити, це розділити постійні рядки в один Host *запис і мати окремий запис для кожного, Host XXXякий складається лише з різних частин (тобто Hostname XXX.YYY.ZZZрядка).
jw013

Ця сторінка є головним результатом (на даний момент), коли Googling "ssh config wildcards", тому дякую за надану відповідь, що стосується цього питання.
надзвичайно суперіорман

9

З відповідей Ігнасіо Васкеса-Абрамса та Х.-Дірка Шмітта можна додати наступне до .ssh / config

HOST XXX*
    HostName %h.YYY.com
    User myname

а потім, наприклад, ви можете увійти як myname@XXX2.YYY.com від

ssh XXX2

оскільки XXX * передбачає вже XXX.YYY.com, HostName повинен бути лише %h, а не%h.YYY.com
biocyberman

8

це працює для мене:

CanonicalizeHostname так
CanonicalDomains xxx.auckland.ac.nz yyy.auckland.ac.nz

хост * .xxx.auckland.ac.nz
   користувач myuser
хост * .yyy.auckland.ac.nz
   користувач myuser

це дозволяє використовувати імена в домені та змінити ім’я користувача:

bluebottle: ~ user_one $ ssh itslogprd05
myuser@itslogprd05.xxx.auckland.ac.nz пароль: 

Це найкраща відповідь для мене. Я позбувся сценарію, який використовував для створення конфігурації!
жарти

Що робити, якщо itslogprd05хост існує в обох доменах? xxx.auckland.ac.nzвиграє, гадаю?
Левенте Гушко
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.