Jak mogę dopasować zakres CIDR do pozycji hosta konfiguracji SSH?

22

Szukam sposobu użycia określonych bloków CIDR w celu dopasowania hostów w konfiguracji klienta SSH (zwykle ~/.ssh/config). Na przykład mam wpis, aby przekazać cały ruch przez hosta bastionu, jeśli adres IP mieści się w pewnym zakresie, powiedzmy 10.1.0.0/16:

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

Działa to bardzo dobrze, ale co powiesz na dodanie kilku zakresów, które nie pasują dokładnie do notacji kropkowej?

# 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

Czy w podręczniku jest coś, co przeoczyłem, lub sprytna sztuczka skryptowa, która pozwoliłaby dopasować te zakresy adresów IP hosta?

fazy
źródło

Odpowiedzi:

24

Dopasowywanie do wzorców w pliku ssh_config odbywa się jako podstawowe dopasowanie wzorców, a nie jako dopasowanie sieciowe / CIDR. Tak więc używanie notacji CIDR nie zadziała.

Strona mężczyzna wyjaśnia, że:

Wzór składa się z zerowej lub większej liczby znaków spacji *((symbol wieloznaczny, który pasuje do zera lub więcej znaków), lub ?(symbol wieloznaczny, który pasuje dokładnie do jednego znaku).

Najlepsze, co możesz zrobić, to użyć listy więcej niż jednego wzoru. Ponownie ze strony podręcznika:

Lista wzorców to lista wzorców oddzielona przecinkami. Wzory na listach wzorców można negować, poprzedzając je wykrzyknikiem ( !).

Aby więc pokryć dwie / 18 sieci, musisz wymienić:

  • wszystkie hosty pasujące 10.2.?.*(tj. 10.2.0.0–10.2.9.255)
  • wszystkie hosty pasujące 10.2.??.*(tj. 10.2.10.0–10.2.99.255)
  • wszystkie hosty pasujące 10.2.10?.*(tj. 10.2.100.0–10.2.109.255)
  • wszystkie hosty pasujące 10.2.11?.*(tj. 10.2.110.0–10.2.119.255)
  • wszyscy gospodarze pasujący 10.2.12?.*Z WYJĄTKIEM pasujących 10.2.128.*i 10.12.129.*(i pamiętaj, że wykluczenie musi być pierwsze!)

Twoja lista wzorów powinna wyglądać następująco:

Host "10.2.?.*","10.2.??.*", "10.2.10?.*","10.2.11?.*","!10.2.128.*","!10.2.129.*","10.2.12?.*"
Jenny D mówi Przywróć Monikę
źródło
4
Mówiąc ściślej, nie jest to wyrażenie regularne, lecz globalna karta wieloznaczna.
Gabor Garami,
1
Dzięki za odpowiedź, prawie dla mnie działa, ale tak naprawdę musiałem rozróżnić te dwa zakresy osobnymi hostwpisami. Potrzebował również każdego cytowanego osobno (ssh / Mac). Najkrótszy mogłem znaleźć: 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*" i 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.*"
etap