Regexp dalam .ssh / config

12

Di tempat kerja, saya sering harus masuk ke host yang mengikuti skema penamaan yang umum, misalnya qc01- qc12, hc01- hc10, dan seterusnya. Semua ini perlu untuk mendapatkan nilai konfigurasi yang sama di laptop saya .ssh/config. Tentu saja, saya bisa menggunakan entri untuk host qc*dan hc*, tapi saya bertanya-tanya apakah sebaliknya mungkin menggunakan ekspresi reguler?

andreas-h
sumber

Jawaban:

5

Silakan, lihat PATTERNSbagian dalam man ssh_config.

Jawaban panjangnya adalah: Tidak, Anda tidak bisa, kecuali Anda menambal Anda sshuntuk mendukungnya.

gelraen
sumber
Saya tidak dapat menemukan bagian ini di blog saya man ssh_config.
Patryk
Versi apa yang muncul?
vonbrand
1

Anda dapat menggunakan ekspresi reguler penuh di ssh_config.

Dokumentasi yang relevan adalah IMO yang sangat sulit dibaca dan dipahami. Saya hanya memahaminya karena saya memiliki 13+ tahun pengalaman Linux dan dan 8+ tahun menggunakan ssh. Jadi inilah ringkasan dokumentasi saya:

  • man ssh_config menjelaskan fitur yang disebut Match
  • lalu ada fitur yang disebut execyang memungkinkan Anda menggunakan perintah shell arbitrer untuk menentukan kecocokan
  • meneruskan parameter input ke perintah shell arbitrary adalah mungkin dan dijelaskan di bagian yang berlabel TOKENS

Dalam kasus saya, saya akhirnya menggunakan di~/.ssh/config :

Match exec "echo %h | grep -q 'NAME[0-9]\+$'"
    User USER
    IdentityFile /path/to/identity/file
    Hostname %h.fully.qualified.domain.name

Pengujian harus dilakukan dengan sesuatu yang rumit seperti ini. Dan untuk melakukan pengujian itu Anda menelepon ssh -vvv HOSTNAME. Yang akan menunjukkan dengan tepat apa yang terjadi, dan apakah baru Anda Matchditerapkan dengan benar.

Trevor Boyd Smith
sumber
0

Memperluas jawaban dari Trevor:

Host yang lebih kompleks juga dimungkinkan, seperti mencocokkan foo123.123dan foo10.10dalam satu aturan TANPA memiliki entri DNS untuk nama host yang digunakan:

Match exec "echo %h | grep -q 'foo[0-9]\+.[0-9]\+$'"
    Port 1234 # just to show it can be paired with non-default ports too,
              # see %p in man ssh_config
    ProxyCommand /usr/bin/nc 10.10.$(echo %h | sed -e 's/foo//') %p

Menggunakan ProxyCommand untuk memanipulasi konten% h dengan shell dan menghubungkan ke port yang tepat melalui netcat. Dengan cara ini Anda dapat membuat preset untuk kategori host, tanpa membuat entri individual.

imp
sumber