Wiele „Host *” w ssh_config?


27

Rozumiem, jak działa ~ / .ssh / config, że każda linia „Host” działa dla każdego pasującego hosta po tym punkcie w pliku konfiguracyjnym.

Mam kilka serwerów osobistych i serwerów roboczych, z którymi muszę się połączyć. Próbuję zrobić coś takiego:

# Ustawienia główne
ControlMaster auto
ControlPath ~/.ssh/controlmaster/%r@%h:% p
ForwardAgent tak
Przekaż X11 tak
Nr GSSAPIA Uwierzytelnienie
Pubkey Uwierzytelnienie tak

# Serwery osobiste
Gospodarz *
Harleypig użytkownika
IdentityFile ~ / .ssh / personal_id_rsa

Host host 1
Nazwa hosta host1.com

Host host 2
Nazwa hosta host2.com

# Serwery robocze
Gospodarz *
Użytkownik alan.young
IdentityFile ~ / .ssh / work_id_rsa

Praca hosta 1
Nazwa hosta work1.companyserver.com

Praca hosta 2
Nazwa hosta work2.companyserver.com

Gospodarz *
Użytkownik devuser

Host dev1
Nazwa hosta dev1.companyserver.com

Host dev2
Nazwa hosta dev2.companyserver.com

Dokumenty wydają się wskazywać, że host1 i host2 powinny używać „personal_id_rsa” i harleypig użytkownika. work1, work2, dev1 i dev2 powinny używać „work_id_rsa”, a pierwsze dwa powinny być użytkownikiem „alan.young”, a dev1 i dev2 powinny być użytkownikiem „devuser”

Tak się jednak nie dzieje. Z tym, co „Host *” stawiam na pierwszym miejscu, próbują się połączyć wszystkie następujące hosty. Czy coś źle zrozumiałem lub coś przeoczyłem?


Dziękuję, między obiema odpowiedziami udało mi się uruchomić połączenia.
harleypig

Odpowiedzi:


36

Z ssh_configinstrukcji :

Ponieważ używana jest pierwsza uzyskana wartość dla każdego parametru, na początku pliku należy podać więcej specyficznych dla hosta deklaracji, a na końcu ogólne wartości domyślne.

W twoim przykładzie wszystkie hosty użyją User harleypigi IdentityFile ~/.ssh/personal_id_rsa.

Traktuj Hostdyrektywy z symbolami wieloznacznymi jako awarie: użyj następujących ustawień tylko wtedy, gdy nie zostały jeszcze ustawione. Musisz napisać coś takiego:

Host host1
Hostname host1.com
Host host2
Hostname host2.com
Host host*
User harleypig
IdentityFile ~/.ssh/personal_id_rsa

Możesz umieścić wiele wzorców w Hostlinii, jeśli danego zestawu aliasów hosta nie można dopasować za pomocą symboli wieloznacznych, np Host host* more* outlier.


15

Zdecydowanie robisz to źle.

  • Zawsze powinieneś wstawić Host *jako ostatni wpis.
  • Nie możesz mieć wielu Host *wpisów

Jeśli twoje maszyny robocze mają format nazwy, który możesz uogólnić, aby kierować reklamy tylko na maszyny robocze, na przykład: machine1.work.com, host.work.com, fileserver.work.com, możesz kierować swoje maszyny robocze jako:

Host *.work.com
User alan.young
IdentityFile ~/.ssh/work_id_rsa

To samo dotyczy twoich komputerów osobistych.


Dla mnie umieszczenie Host *na początku pliku wydaje się działać dobrze. Być może fakt, że używasz symbolu wieloznacznego, przebija fakt, że jest to pierwszy wpis przy ustalaniu priorytetów?
Zaz

Przy okazji Host *.work.comjest to niepoprawna składnia. Działa tylko na odwrót:Host myserver*
Daniel Andrei Mincă

3
@ MincăDanielAndrei to działa w obie strony, jest tylko wyrażeniem wieloznacznym i można go używać jak każdą inną symbol wieloznaczny. Host git-codecommit. *. Amazonaws.com To jest działający przykład z mojego ~ / .ssh / config
Hameedullah Khan

@HameedullahKhan poważnie, próbowałem tego i nie odpowiada. Jeśli to zrobisz Host *subdomain.com, nie zareaguje.
Daniel Andrei Mincă

1
@ MincăDanielAndrei To zachowanie jest udokumentowane na stronach podręcznika, jeśli nie działa (dla mnie też) jest błędem.
goetzc
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.