Comment puis-je faire correspondre une plage CIDR pour une entrée d'hôte de configuration SSH?

22

Je cherche un moyen d'utiliser des blocs CIDR spécifiques pour faire correspondre les hôtes dans la configuration du client SSH (généralement ~/.ssh/config). Par exemple, j'ai une entrée pour transférer tout le trafic via un hôte bastion si l'IP tombe dans une certaine plage, disons 10.1.0.0/16:

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

Cela fonctionne très bien, mais qu'en est-il lorsque j'ajoute des plages qui ne correspondent pas exactement à la notation par points?

# 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

Y a-t-il quelque chose dans le manuel que j'ai manqué, ou une astuce de script intelligente qui permettrait de faire correspondre ces plages d'adresses IP hôtes?

flou
la source

Réponses:

24

La correspondance avec les modèles dans le fichier ssh_config est effectuée en tant que correspondance de modèle de base, pas en tant que correspondance réseau / CIDR. Donc, utiliser la notation CIDR ne fonctionnera pas.

La page de manuel explique que:

Un modèle se compose de zéro ou plusieurs caractères non blancs, *(un caractère générique qui correspond à zéro ou plusieurs caractères) ou ?(un caractère générique qui correspond exactement à un caractère).

Le mieux que vous puissiez faire est d'utiliser une liste de plusieurs motifs. Encore une fois, à partir de la page de manuel:

Une liste de modèles est une liste de modèles séparés par des virgules. Les modèles dans les listes de modèles peuvent être annulés en les précédant d'un point d'exclamation ( !).

Donc, pour couvrir vos deux / 18 filets, vous devez répertorier:

  • tous les hôtes correspondant 10.2.?.*(ie 10.2.0.0–10.2.9.255)
  • tous les hôtes correspondant 10.2.??.*(ie 10.2.10.0–10.2.99.255)
  • tous les hôtes correspondant 10.2.10?.*(c.-à-d. 10.2.100.0–10.2.109.255)
  • tous les hôtes correspondant 10.2.11?.*(c.-à-d. 10.2.110.0–10.2.119.255)
  • tous les hôtes correspondant 10.2.12?.*SAUF ceux correspondant 10.2.128.*et 10.12.129.*(et rappelez-vous que l'exclusion doit venir en premier!)

Votre liste de modèles devrait alors ressembler à ceci:

Host "10.2.?.*","10.2.??.*", "10.2.10?.*","10.2.11?.*","!10.2.128.*","!10.2.129.*","10.2.12?.*"
Jenny D dit de réintégrer Monica
la source
4
Pour être précis, ce n'est pas une expression régulière, c'est un caractère générique globbing.
Gabor Garami
1
Merci pour la réponse, cela fonctionne presque pour moi, mais j'avais en fait besoin de différencier ces deux plages avec des hostentrées distinctes . Il fallait également que chacun d'eux soit cité séparément (ssh / Mac). Le plus court que j'ai pu trouver: 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*" et 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.*"
2017