Bagaimana saya bisa mencocokkan rentang CIDR untuk entri host konfigurasi SSH?

22

Saya mencari cara untuk menggunakan blok CIDR tertentu untuk mencocokkan host dalam konfigurasi klien SSH (biasanya ~/.ssh/config). Sebagai contoh, saya memiliki entri untuk meneruskan semua lalu lintas melalui host benteng jika IP jatuh ke kisaran tertentu, katakanlah 10.1.0.0/16:

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

Ini bekerja dengan sangat baik, tetapi bagaimana ketika saya menambahkan beberapa rentang yang tidak sesuai dengan notasi titik persis?

# 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

Apakah ada sesuatu dalam manual yang saya lewatkan, atau trik scripting yang pintar yang akan memungkinkan mencocokkan rentang IP host ini?

membingungkan
sumber

Jawaban:

24

Pencocokan terhadap pola dalam file ssh_config dilakukan sebagai pencocokan pola dasar, bukan sebagai pencocokan jaringan / CIDR. Jadi menggunakan notasi CIDR tidak akan berhasil.

The halaman manual menjelaskan bahwa:

Sebuah pola terdiri dari nol atau lebih karakter bukan spasi, *(wildcard yang cocok dengan nol atau lebih karakter), atau ?(wildcard yang cocok dengan tepat satu karakter).

Yang terbaik yang dapat Anda lakukan adalah menggunakan daftar lebih dari satu pola. Sekali lagi, dari halaman manual:

Daftar pola adalah daftar pola yang dipisahkan koma. Pola dalam daftar pola dapat dinegasikan dengan mendahului mereka dengan tanda seru ( !).

Jadi untuk menutupi dua / 18 jaring Anda, Anda harus mendaftar:

  • semua host yang cocok 10.2.?.*(yaitu 10.2.0.0-10.2.9.255)
  • semua host yang cocok 10.2.??.*(yaitu 10.2.10.0-10.2.99.255)
  • semua host yang cocok 10.2.10?.*(mis. 10.2.100.0–10.2.109.255)
  • semua host yang cocok 10.2.11?.*(yaitu 10.2.110.0–10.2.119.255)
  • semua host yang cocok 10.2.12?.*KECUALI yang cocok 10.2.128.*dan 10.12.129.*(dan ingat bahwa pengecualian harus didahulukan!)

Maka daftar pola Anda akan terlihat seperti ini:

Host "10.2.?.*","10.2.??.*", "10.2.10?.*","10.2.11?.*","!10.2.128.*","!10.2.129.*","10.2.12?.*"
Jenny D kata Reinstate Monica
sumber
4
Lebih tepatnya, ini bukan ekspresi reguler, ini adalah wildcard globbing.
Gabor Garami
1
Terima kasih atas jawabannya, hampir berhasil untuk saya, tetapi saya benar-benar perlu membedakan dua rentang dengan hostentri yang terpisah . Itu juga membutuhkan masing-masing dikutip secara terpisah (ssh / Mac). Terpendek saya dapat menemukan: 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*" dan 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.*"
berkabut