Як я можу зіставити діапазон CIDR для запису хоста з конфігурацією SSH?


22

Я шукаю спосіб використовувати конкретні блоки CIDR для узгодження хостів у конфігурації клієнта SSH (як правило ~/.ssh/config). Наприклад, у мене є запис для пересилання всього трафіку через хост бастіону, якщо IP потрапляє в певний діапазон, скажімо 10.1.0.0/16:

host 10.1.*
    proxycommand ssh -q bastion -W %h:%p

Це працює дуже добре, але як бути, коли я додаю діапазони, які точно не відповідають позначенням точок?

# doesn't work, unfortunately
host 10.2.0.0/18
    proxycommand ssh -q bastion-foo -W %h:%p
host 10.2.64.0/18
    proxycommand ssh -q bastion-bar -W %h:%p

Чи є в керівництві щось, що я пропустив, або хитрий сценарій, який би дозволив відповідати цим діапазонам IP хостів?

Відповіді:


24

Узгодження з шаблонами у файлі ssh_config виконується як узгодження основного шаблону, а не як відповідність мережі / CIDR. Тому використання позначень CIDR не спрацює.

Сторінка людини пояснює, що:

Шаблон складається з нуля або більше символів, що не містять пробілів, *(підстановочний знак, який відповідає нулю або більше символів), або ?(підстановочний знак, що відповідає точно одному символу).

Найкраще, що ви можете зробити, це використовувати список з декількох шаблонів. Знову зі сторінки керівництва:

Список шаблонів - це розділений комою список шаблонів. Шаблони в списках шаблонів можуть бути заперечені, попередньо перед ними знак оклику ( !).

Отже, щоб покрити дві / 18 мереж, вам потрібно буде вказати:

  • всі узгодження хостів 10.2.?.*(тобто 10.2.0.0–10.2.9.255)
  • всі узгодження хостів 10.2.??.*(тобто 10.2.10.0–10.2.99.255)
  • всі узгодження хостів 10.2.10?.*(тобто 10.2.100.0–10.2.109.255)
  • всі узгодження хостів 10.2.11?.*(тобто 10.2.110.0–10.2.119.255)
  • всі хости відповідності 10.2.12?.*КРІМ відповідності ті , 10.2.128.*і 10.12.129.*(і пам'ятайте , що виключення повинно прийти першим!)

Тоді ваш список шаблонів повинен виглядати так:

Host "10.2.?.*","10.2.??.*", "10.2.10?.*","10.2.11?.*","!10.2.128.*","!10.2.129.*","10.2.12?.*"

4
Якщо бути точним, це не регулярний вираз, це загальна маска.
Габор Гарамі

1
Дякую за відповідь, це майже працює для мене, але мені фактично потрібно було диференціювати ці два діапазони з окремими hostзаписами. Він також потребував кожного цитованого окремо (ssh / Mac). Найкоротше, що я міг знайти: host "10.2.?.*", "10.2.??.*", "!10.2.64*", "!10.2.65*", "!10.2.66*", "!10.2.67*", "!10.2.68*", "!10.2.69*", "!10.2.7*", "!10.2.8*", "!10.2.9*" і host "10.2.??.*", "10.2.10?.*", "10.2.11?.*", "10.2.12?.*", "!10.2.1?.*", "!10.2.2?.*", "!10.2.3?.*", "!10.2.4?.*", "!10.2.5?.*", "!10.2.60.*", "!10.2.61.*", "!10.2.62.*", "!10.2.63.*", "!10.2.128.*", "!10.2.129.*"
fazy

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.