Wiele podobnych wpisów w konfiguracji ssh

193

Powiedz, że chcę skonfigurować moje sshopcje dla 30 serwerów z tą samą konfiguracją w moim .ssh configpliku:

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

gdzie jedyną rzeczą, która zmienia się między tymi 30 maszynami jest XXX.

Czy zamiast powtarzać powyższą strukturę 30 razy w moim configpliku, istnieje inny sposób zdefiniowania zakresu maszyn?

Amelio Vazquez-Reina
źródło

Odpowiedzi:

232

Ze strony podręcznika ssh_config(5):

 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).

Więc:

Host XXX1 XXX2 XXX3
  HostName %h.YYY.com
Ignacio Vazquez-Abrams
źródło
9
Wygląda na %hto, że funkcja pojawiła się w wersji 5.6 OpenSSH . Zastanawiałem się, dlaczego nie widziałem go wcześniej - wersja w Debian Squeeze to 5.5.
jw013,
2
Jeśli masz stary system operacyjny lub potrzebujesz reguł, które nie są obsługiwane config, zawsze możesz napisać prosty skrypt, który go wygeneruje config.
Roger Dahl,
69

Aby zminimalizować konfigurację, możesz mieć .ssh/configpodobny

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 ...można zastąpić, Host *jeśli każdy host ma następującą konfigurację

Guillaume Vincent
źródło
2
To wydaje się być jedyną odpowiedzią, która faktycznie pomaga OP (i mnie).
Mad Physicist
Jakie jest zamówienie priorytetowe? Czy to tylko elementy zdefiniowane później w pliku zastępują elementy zdefiniowane wcześniej w pliku? Jak powiedzmy, że miałem „Kompresję nie” pod „Hostem X01”, czy byłoby to zastąpione przez „Kompresję tak” pod „Hostem X01 X02”?
Ben Farmer,
1
Z podręcznika ssh_config: Ponieważ używana jest pierwsza uzyskana wartość dla każdego parametru, na początku pliku należy podać więcej deklaracji specyficznych dla hosta, a na końcu ogólne ustawienia domyślne.
Guillaume Vincent
Czy można Host X01 X02 ...go zastąpić *.YYY.com? Wydaje się to nieco łatwiejsze do opanowania, jeśli działa.
Michael
51

Po prostu użyj *

Zobacz man ssh_config:

WZORY Wzorzec składa się z zero lub więcej znaków spacji, „*” (symbol wieloznaczny pasujący do zera lub więcej znaków) lub „?” (symbol wieloznaczny, który pasuje dokładnie do jednego znaku). Na przykład, aby określić zestaw deklaracji dla dowolnego hosta w zestawie domen „.co.uk”, można zastosować następujący wzorzec:

       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
źródło
Dzięki! Wydaje się, że tego potrzebuję, ale nadal nie rozumiem, jak dostosować to do mojej sprawy. Czy używam znaku zapytania ?wszędzie tam, gdzie chcę, aby został zastąpiony wzorem pasującym do *znaku?
Amelio Vazquez-Reina,
2
Hmm Myślę, że wzory służą innym celom niż to, czego potrzebuję. Przekierowują wiele zapytań do tego samego configwpisu, ale parametry hosta są stałe (tzn. Wzorce nie mogą być użyte do szablonu parametrów). Czy się mylę?
Amelio Vazquez-Reina
4
@ user27915816 Tak, masz rację, nie ma możliwości zrobienia „szablonów”, o ile mi wiadomo. Najlepsze, co możesz zrobić, to oddzielić stałe linie do jednego Host *wpisu i mieć osobny wpis dla każdego, Host XXXktóry składa się tylko z części, które się różnią (tj. Hostname XXX.YYY.ZZZLinia).
jw013,
Ta strona jest (jak na razie) najlepszym wynikiem, kiedy Googling „symbole wieloznaczne ssh konfiguracji”, więc dziękuję za udzielenie odpowiedzi na to pytanie.
vastlysuperiorman
9

Z odpowiedzi Ignacio Vazquez-Abramsa i H.-Dirka Schmitta można dodać do .ssh / config

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

a następnie, na przykład, możesz zalogować się jako [email protected] przez

ssh XXX2
Vito Chou
źródło
ponieważ XXX * oznacza już XXX.YYY.com, HostName powinna być tylko %h, a nie%h.YYY.com
biocyberman
8

to działa dla mnie:

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

host * .xxx.auckland.ac.nz
   użytkownik myuser
host * .yyy.auckland.ac.nz
   użytkownik myuser

pozwala to na używanie nazw w domenie i zmianę nazwy użytkownika:

bluebottle: ~ user_one $ ssh itslogprd05
[email protected] hasło: 
Russell Fulton
źródło
To dla mnie najlepsza odpowiedź. Pozbyłem się skryptu, którego użyłem do wygenerowania konfiguracji!
żartuje
Co jeśli itslogprd05host istnieje w obu domenach? xxx.auckland.ac.nzwygrywa, tak myślę?
Levente Huszko