¿Cómo puedo hacer coincidir un rango CIDR para una entrada de host de configuración SSH?

22

Estoy buscando una manera de usar bloques CIDR específicos para que coincidan con los hosts en la configuración del cliente SSH (generalmente ~/.ssh/config). Por ejemplo, tengo una entrada para reenviar todo el tráfico a través de un host de bastión si la IP cae en un cierto rango, digamos 10.1.0.0/16:

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

Esto funciona muy bien, pero ¿qué tal cuando agrego algunos rangos que no se ajustan exactamente a la notación de puntos?

# 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

¿Hay algo en el manual que me haya perdido, o un ingenioso truco de secuencias de comandos que permita hacer coincidir estos rangos de IP del host?

fazy
fuente

Respuestas:

24

La coincidencia con patrones en el archivo ssh_config se realiza como coincidencia de patrones básicos, no como una coincidencia de red / CIDR. Por lo tanto, usar la notación CIDR no va a funcionar.

La página del manual explica que:

Un patrón consta de cero o más caracteres que no son espacios en blanco, *(un comodín que coincide con cero o más caracteres) o ?(un comodín que coincide exactamente con un carácter).

Lo mejor que puede hacer es usar una lista de más de un patrón. De nuevo, desde la página del manual:

Una lista de patrones es una lista de patrones separados por comas. Los patrones dentro de las listas de patrones se pueden negar precediéndolos con un signo de exclamación ( !).

Entonces, para cubrir tus dos / 18 redes, deberías enumerar:

  • todos los hosts coinciden 10.2.?.*(es decir, 10.2.0.0–10.2.9.255)
  • todos los hosts coinciden 10.2.??.*(es decir, 10.2.10.0–10.2.99.255)
  • todos los hosts coinciden 10.2.10?.*(es decir, 10.2.100.0–10.2.109.255)
  • todos los hosts coinciden 10.2.11?.*(es decir, 10.2.110.0–10.2.119.255)
  • todos los hosts coinciden, 10.2.12?.*EXCEPTO los que coincidan 10.2.128.*y 10.12.129.*(y recuerde que la exclusión debe ser lo primero)

Su lista de patrones debería verse así:

Host "10.2.?.*","10.2.??.*", "10.2.10?.*","10.2.11?.*","!10.2.128.*","!10.2.129.*","10.2.12?.*"
Jenny D dice Reinstate Monica
fuente
44
Para ser precisos, esta no es una expresión regular, es un comodín global.
Gabor Garami
1
Gracias por la respuesta, casi funciona para mí, pero en realidad necesitaba diferenciar esos dos rangos con hostentradas separadas . También necesitaba cada uno citado por separado (ssh / Mac). Más corto que pude encontrar: 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*" y 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.*"
fabuloso