
Ich hatte eine ~/.ssh/config
Datei, die einwandfrei funktionierte. Sie hatte dieses Format:
Host *
IdentityFile ~/.ssh/id_null
TCPKeepAlive no
ServerAliveCountMax 5000
Host *.domain.com
User mydomainuser
IdentityFile ~/.ssh/id_domain
Host github.com
User gcb
IdentityFile ~/.ssh/id_domain
(es gab noch viel mehr Domänen, aber ignorieren wir diese vorerst)
Es funktionierte perfekt, obwohl im Handbuch stand, dass die spezifischeren Host-Muster oben stehen sollten, funktionierte es immer einwandfrei. Ich habe immer per SSH auf diese beiden Domänen zugegriffen und die richtigen Identitätsschlüssel wurden problemlos abgerufen. Ich hatte nie ein Problem, wenn der Nullschlüssel für diese beiden Domänen ausprobiert wurde. Und ich habe das jahrelang verwendet. Habe immer den richtigen Benutzer und Schlüssel erhalten. Ich habe dieselbe Konfigurationsdatei sowohl unter Debian, Fedora als auch unter OSX verwendet.
Heute habe ich unter OSX 10.10 (OpenSSH_6.2p2, OSSLShim 0.9.8r 8. Dez. 2011), das vorher funktioniert hat, versucht, auch User unkown
die *
Regel oben zu ergänzen. Und plötzlich sendet SSH bei jedem Versuch user=unknown und identityfile=id_null, wodurch ich mich nirgendwo anmelden kann. Das hat mich veranlasst, die Manpage für ssh_config zu lesen und alles genau nach Vorschrift zu belassen … und es funktioniert immer noch nicht. Ich habe auch versucht, den User
Eintrag zu entfernen, *
aber das hat das Problem nicht behoben.
meine aktuelle .ssh/config
Datei ist
Host exact.hostname.domain.com
User mydomainuser
IdentityFile ~/.ssh/id_domain
Host *.domain.com
User mydomainuser
IdentityFile ~/.ssh/id_domain
Host github.com
User gcb
IdentityFile ~/.ssh/id_domain
Host *
IdentityFile ~/.ssh/id_null
TCPKeepAlive no
ServerAliveCountMax 50
es wird immer noch versuchen, id_null als Identitätsdatei zu verwenden, wenn ich ssh exact.hostname.domain.com
. Ich habe auch versucht, mehrere Muster zu verwenden und habe Host *.domain.com exact.hostname.domain.com
statt zu wiederholen. Nichts funktioniert. Irgendwelche Ideen, was da falsch ist?
Wie kann ich einen Standard festlegen User
und IdentityFile
diesen für einzelne Domänen überschreiben?
Bearbeitung 1: Ich habe es Host exact.hostname.domain.com
sowohl vor als auch nach dem *
einen hinzugefügt. und ssh -vvv
zeigt:
debug1: /Users/.../.ssh/config line 1: Applying options for exact.hostname.domain.com
debug1: /Users/.../.ssh/config line 19: Applying options for *
debug1: /Users/.../.ssh/config line 37: Applying options for exact.hostname.domain.com
aber ich komme immer noch am Endeno such identity: .ssh/id_null: No such file or directory
edit 2: eine andere Merkwürdigkeit, die ich sah aufssh -vvv
es versucht immer, alle Schlüssel zu verwenden, die ich habe. Ich dachte also, es könnte einen fest codierten Standard für geben .ssh/id_rsa*
, also habe ich alle meine privaten Schlüssel dorthin verschoben, .ssh/keys/
um es vor diesem Standard zu verbergen, und die spezifischen Host
Einträge aktualisiert ... es stellte sich heraus, es probiert Schlüssel aus allen Host-Einträgen! Sogar die ohne Übereinstimmung!
Zusammenfassend habe ich oben und unten in der Datei eine bestimmte Host-Übereinstimmung (nur um sicherzugehen), dann Hosts, die nicht übereinstimmen, und die *
eine.
aber ssh -vvv zeigt:
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /Users/x/.ssh/keys/id_rsa_git (0x7f954b700530),
debug2: key: /Users/x/.ssh/keys/id_rsa (0x7f954b415700), explicit
debug2: key: /Users/x/.ssh/id_null (0x0), explicit
Warum um Himmels Willen wird das hinzugefügt .ssh/keys/id_rsa_git
, wenn das das IdentityFile
Einzige ist, was unten erwähnt wird Host github.com
? Und warum versucht es letztendlich zu senden, id_null
obwohl es mit dem expliziten Wert übereinstimmt Host exact.hostname.domain.com
, wie es in der Debug-Ausgabe steht debug1: /Users/.../.ssh/config line 1: Applying options for exact.hostname.domain.com
?
Bearbeitung 3:
nachdem ich alle meine Schlüssel nach verschoben habe .ssh/keys/*
und dort für jeden Host nur die Schlüssel angebe ssh_config
, sehe ich jetzt bei jeder ssh
Instanziierung:
/Users/me/.ssh/id_*[^p][^u][^b]: No such file or directory
aber auch danachTrotzdemlädt die IdentityFiles vonandereHosts in ssh_config während der Verbindung. Warum?!
Antwort1
man ssh-config
sagt:
Da der erste erhaltene Wert für jeden Parameter verwendet wird, sollten eher hostspezifische Deklarationen am Anfang der Datei und allgemeine Standardwerte am Ende angegeben werden.
Stellen Sie daher sicher, dass die gewünschte Konfiguration im ersten übereinstimmenden Host
Eintrag enthalten ist, wie durch die ssh -vv
übereinstimmenden Zeilen angezeigt: Applying options for
.
Im allgemeinen Fall bedeutet dies, Host *
dasszuletzt.