Mehrere 'Host *' in ssh_config?

27

Mein Verständnis der Funktionsweise von ~ / .ssh / config ist, dass jede 'Host'-Zeile für jeden Host wirksam wird, der nach diesem Punkt in der Konfigurationsdatei übereinstimmt.

Ich habe eine Reihe von Personal Servern und Arbeitsservern, zu denen ich eine Verbindung herstellen muss. Ich versuche etwas wie das Folgende zu tun:

# Allgemeine Einstellungen
ControlMaster auto
ControlPath ~/.ssh/controlmaster/%r@%h:% p
ForwardAgent ja
ForwardX11 ja
GSSAPIAuthentication No.
PubkeyAuthentication ja

# Personal Server
Gastgeber *
Benutzer harleypig
IdentityFile ~ / .ssh / personal_id_rsa

Host host1
Hostname host1.com

Host host2
Hostname host2.com

# Arbeitsserver
Gastgeber *
Benutzer alan.young
IdentityFile ~ / .ssh / work_id_rsa

Host-Arbeit1
Hostname work1.companyserver.com

Host work2
Hostname work2.companyserver.com

Gastgeber *
Benutzer devuser

Host dev1
Hostname dev1.companyserver.com

Host dev2
Hostname dev2.companyserver.com

Die Dokumente scheinen darauf hinzudeuten, dass host1 und host2 'personal_id_rsa' und den Benutzer harleypig verwenden sollten. work1, work2, dev1 und dev2 sollten 'work_id_rsa' verwenden und die ersten beiden sollten der Benutzer 'alan.young' sein und dev1 und dev2 sollten der Benutzer 'devuser' sein

Dies geschieht jedoch nicht. Was auch immer "Host" ist, mit dem alle folgenden Hosts eine Verbindung herstellen möchten. Missverstehe ich etwas oder vermisse ich etwas?

Harleypig
quelle
Vielen Dank, zwischen diesen beiden Antworten konnte ich meine Verbindungen zum Laufen bringen.
Harleypig

Antworten:

36

Aus dem ssh_configHandbuch :

Da der erste ermittelte Wert für jeden Parameter verwendet wird, sollten am Anfang der Datei weitere hostspezifische Deklarationen und am Ende allgemeine Standardwerte angegeben werden.

In Ihrem Beispiel verwenden also alle Hosts User harleypigund IdentityFile ~/.ssh/personal_id_rsa.

Stellen Sie sich HostDirektiven mit Platzhaltern als Fallbacks vor: Verwenden Sie die folgenden Einstellungen nur, wenn sie noch nicht festgelegt wurden. Sie müssen so etwas schreiben:

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

Sie können mehrere Muster in eine HostZeile einfügen, wenn ein bestimmter Satz von Host-Aliasnamen nicht mit Platzhaltern abgeglichen werden kann, z Host host* more* outlier.

Gilles 'SO - hör auf böse zu sein'
quelle
15

Du machst es definitiv falsch.

  • Sie sollten immer Host *als letzten Eintrag setzen.
  • Sie können nicht mehrere Host *Einträge haben

Wenn Ihre Arbeitsmaschinen ein Namensformat haben, das Sie so verallgemeinern können, dass es nur auf die Arbeitsmaschinen zielt, z. B .: machine1.work.com, host.work.com, fileserver.work.com, dann können Sie Ihre Arbeitsmaschinen wie folgt ausrichten:

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

Gleiches gilt für Ihre persönlichen Maschinen.

Hameedullah Khan
quelle
Für mich Host *scheint das Setzen am Anfang der Datei gut zu funktionieren. Vielleicht übertrifft die Tatsache, dass Sie einen Platzhalter verwenden, die Tatsache, dass dies der erste Eintrag ist, wenn Sie Prioritäten setzen?
Zaz
Übrigens ist die Host *.work.comSyntax ungültig. Es funktioniert nur umgekehrt:Host myserver*
Daniel Andrei Mincă
3
@ MincăDanielAndrei es funktioniert in beide Richtungen, es ist nur ein Platzhalterausdruck und Sie können ihn wie jeden anderen Platzhalter verwenden. Host git-codecommit. *. Amazonaws.com Dies ist ein funktionierendes Beispiel aus meiner ~ / .ssh / config
Hameedullah Khan
@HameedullahKhan im Ernst, ich habe das versucht und es reagiert nicht. Wenn Sie dies tun, wird Host *subdomain.comes nicht reagieren.
Daniel Andrei Mincă
1
@ MincăDanielAndrei Dieses Verhalten ist in den Manpages dokumentiert, wenn es nicht funktioniert (für mich auch nicht), ist es ein Fehler.
Goetzc