Как я могу сопоставить диапазон 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 хоста?

fazy
источник

Ответы:

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.*"
Самое