Come posso abbinare un intervallo CIDR per una voce host di configurazione SSH?


22

Sto cercando un modo per utilizzare specifici blocchi CIDR per abbinare gli host nella configurazione del client SSH (di solito ~/.ssh/config). Ad esempio, ho una voce per inoltrare tutto il traffico attraverso un host bastione se l'IP rientra in un determinato intervallo, diciamo 10.1.0.0/16:

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

Funziona molto bene, ma che ne dici di aggiungere alcuni intervalli che non si adattano esattamente alla notazione dei punti?

# 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

C'è qualcosa nel manuale che ho perso o un trucco di scripting intelligente che consentirebbe di abbinare questi intervalli IP host?

Risposte:


24

La corrispondenza con i motivi nel file ssh_config viene eseguita come corrispondenza dei motivi di base, non come corrispondenza di rete / CIDR. Quindi l'uso della notazione CIDR non funzionerà.

La pagina man spiega che:

Un modello è composto da zero o più caratteri non bianchi, *(un carattere jolly che corrisponde a zero o più caratteri) o ?(un carattere jolly che corrisponde esattamente a un carattere).

Il meglio che puoi fare è usare un elenco di più di un modello. Ancora una volta, dalla pagina del manuale:

Un elenco di schemi è un elenco di schemi separato da virgole. I motivi all'interno degli elenchi di motivi possono essere annullati precedendoli con un punto esclamativo ( !).

Quindi per coprire le tue due / 18 reti, dovresti elencare:

  • corrispondenza di tutti gli host 10.2.?.*(ovvero 10.2.0.0–10.2.9.255)
  • corrispondenza di tutti gli host 10.2.??.*(ovvero 10.2.10.0–10.2.99.255)
  • corrispondenza di tutti gli host 10.2.10?.*(ovvero 10.2.100.0–10.2.109.255)
  • corrispondenza di tutti gli host 10.2.11?.*(ovvero 10.2.110.0–10.2.119.255)
  • tutti gli host corrispondenti 10.2.12?.*TRANNE quelli corrispondenti 10.2.128.*e 10.12.129.*(e ricorda che l'esclusione deve venire prima!)

L'elenco dei motivi dovrebbe quindi apparire così:

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

4
Per essere precisi, questa non è un'espressione regolare, è un jolly sconvolgente.
Gabor Garami,

1
Grazie per la risposta, funziona quasi per me, ma in realtà avevo bisogno di differenziare quei due intervalli con hostvoci separate . Aveva anche bisogno di ognuno citato separatamente (ssh / Mac). Il più breve che potessi trovare: 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*" e 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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.