Beberapa entri serupa di ssh config

193

Katakanlah saya ingin mengonfigurasi sshopsi saya untuk 30 server dengan pengaturan yang sama di .ssh configfile saya :

host XXX
     HostName XXX.YYY.com
     User my_username
     Compression yes
     Ciphers arcfour,blowfish-cbc
     Protocol 2
     ControlMaster auto
     ControlPath ~/.ssh/%r@%h:%p
     IdentityFile ~/.ssh/YYY/id_rsa

di mana satu-satunya hal yang berubah antara 30 mesin ini adalah XXX.

Daripada mengulangi struktur di atas 30 kali dalam configfile saya , apakah ada cara lain untuk mendefinisikan berbagai mesin?

Amelio Vazquez-Reina
sumber

Jawaban:

232

Dari ssh_config(5)halaman manual:

 Host    Restricts the following declarations (up to the next Host key‐
         word) to be only for those hosts that match one of the patterns
         given after the keyword.  If more than one pattern is provided,
         they should be separated by whitespace.

...

 HostName
         Specifies the real host name to log into.  This can be used to
         specify nicknames or abbreviations for hosts.  If the hostname
         contains the character sequence ‘%h’, then this will be replaced
         with the host name specified on the commandline (this is useful
         for manipulating unqualified names).

Begitu:

Host XXX1 XXX2 XXX3
  HostName %h.YYY.com
Ignacio Vazquez-Abrams
sumber
9
Tampaknya %hfitur ini muncul pada rilis 5.6 dari OpenSSH . Saya bertanya-tanya mengapa saya belum pernah melihatnya - versi di Debian Squeeze adalah 5.5.
jw013
2
Jika Anda menggunakan OS lama atau membutuhkan aturan yang tidak didukung config, Anda selalu dapat menulis skrip sederhana yang menghasilkan config.
Roger Dahl 6-15
69

Untuk meminimalkan pengaturan, Anda dapat memiliki yang .ssh/configseperti ini

Host X01
    HostName X01.YYY.com

Host X02
    HostName X02.YYY.com

...

Host X01 X02 ...
     User my_username
     Compression yes
     Ciphers arcfour,blowfish-cbc
     Protocol 2
     ControlMaster auto
     ControlPath ~/.ssh/%r@%h:%p
     IdentityFile ~/.ssh/YYY/id_rsa

Host X01 X02 ...dapat diganti dengan Host *jika setiap host memiliki konfigurasi berikut

Guillaume Vincent
sumber
2
Ini sepertinya satu-satunya jawaban yang benar-benar membantu OP (dan saya sendiri).
Fisikawan Gila
Apa urutan prioritas? Apakah ini hanya hal-hal yang didefinisikan kemudian dalam file yang menggantikan hal-hal yang didefinisikan sebelumnya dalam file? Seperti misalnya saya memiliki "Kompresi no" di bawah "Host X01", apakah itu kemudian akan ditimpa oleh "Compression yes" di bawah "Host X01 X02"?
Ben Farmer
1
Dari manual ssh_config: Karena nilai pertama yang diperoleh untuk setiap parameter digunakan, lebih banyak deklarasi khusus host harus diberikan di dekat awal file, dan default umum di akhir.
Guillaume Vincent
Bisakah Host X01 X02 ...diganti *.YYY.com? Tampaknya sedikit lebih mudah dikelola jika berhasil.
Michael
51

Cukup gunakan *

Lihat man ssh_config:

POLA Pola terdiri dari nol atau lebih karakter bukan spasi, '*' (wildcard yang cocok dengan nol atau lebih karakter), atau '?' (wildcard yang sama persis dengan satu karakter). Misalnya, untuk menentukan sekumpulan deklarasi untuk host apa pun di kumpulan domain ".co.uk", pola berikut dapat digunakan:

       Host *.co.uk

 The following pattern would match any host in the 192.168.0.[0-9] network range:

       Host 192.168.0.?

 A pattern-list is a comma-separated list of patterns.  Patterns within pattern-lists may be negated by preceding them with an
 exclamation mark (‘!’).  For example, to allow a key to be used from anywhere within an organisation except from the “dialup”
 pool, the following entry (in authorized_keys) could be used:

       from="!*.dialup.example.com,*.example.com"
H.-Dirk Schmitt
sumber
Terima kasih! Sepertinya itu yang saya butuhkan, tetapi saya masih tidak mengerti bagaimana menyesuaikannya dengan kasus saya. Apakah saya menggunakan tanda tanya di ?mana pun saya ingin diganti dengan pola yang cocok dengan *tanda?
Amelio Vazquez-Reina
2
Hmm. Saya pikir pola melayani tujuan yang berbeda dari yang saya butuhkan. Mereka mengarahkan beberapa kueri ke configentri yang sama , tetapi parameter Host diperbaiki (yaitu pola tidak dapat digunakan untuk template parameter). Apakah aku salah?
Amelio Vazquez-Reina
4
@ user27915816 Ya, Anda benar, tidak ada cara untuk melakukan "template" sejauh yang saya tahu. Yang terbaik yang dapat Anda lakukan adalah memisahkan garis konstan menjadi satu Host *entri, dan memiliki entri terpisah untuk masing-masing Host XXXyang hanya terdiri dari bagian-bagian yang bervariasi (yaitu Hostname XXX.YYY.ZZZgaris).
jw013
Halaman ini adalah hasil teratas (untuk saat ini) ketika Googling "ssh config wildcard", jadi terima kasih telah memberikan jawaban yang menjawab pertanyaan itu.
farlysuperiorman
9

Dari jawaban Ignacio Vazquez-Abrams dan H.-Dirk Schmitt, orang dapat menambahkan yang berikut ini ke .ssh / config

HOST XXX*
    HostName %h.YYY.com
    User myname

dan kemudian, misalnya, Anda dapat masuk sebagai [email protected] oleh

ssh XXX2
Vito Chou
sumber
sejak XXX * sudah menyiratkan XXX.YYY.com sudah, HostName seharusnya hanya %h, tidak%h.YYY.com
biocyberman
8

ini bekerja untuk saya:

CanonicalizeHostname ya
CanonicalDomains xxx.auckland.ac.nz yyy.auckland.ac.nz

host * .xxx.auckland.ac.nz
   pengguna pengguna
tuan rumah * .yyy.auckland.ac.nz
   pengguna pengguna

ini memungkinkan seseorang untuk menggunakan nama dalam domain dan mengubah nama pengguna:

bluebottle: ~ user_one $ ssh itslogprd05
Kata sandi [email protected]: 
Russell Fulton
sumber
Ini jawaban terbaik untukku. Saya menyingkirkan skrip yang saya gunakan untuk menghasilkan konfigurasi saya!
jooks
Bagaimana jika itslogprd05ada host di kedua domain? xxx.auckland.ac.nzmenang, kurasa?
Levente Huszko