Was kann dazu führen, dass .ssh/config-Änderungen ignoriert werden

Was kann dazu führen, dass .ssh/config-Änderungen ignoriert werden

Ich hatte eine ~/.ssh/configDatei, 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 unkowndie *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 UserEintrag zu entfernen, *aber das hat das Problem nicht behoben.

meine aktuelle .ssh/configDatei 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.comstatt zu wiederholen. Nichts funktioniert. Irgendwelche Ideen, was da falsch ist?

Wie kann ich einen Standard festlegen Userund IdentityFilediesen für einzelne Domänen überschreiben?


Bearbeitung 1: Ich habe es Host exact.hostname.domain.comsowohl vor als auch nach dem *einen hinzugefügt. und ssh -vvvzeigt:

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 HostEinträ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 IdentityFileEinzige ist, was unten erwähnt wird Host github.com? Und warum versucht es letztendlich zu senden, id_nullobwohl 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 sshInstanziierung:

/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-configsagt:

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 HostEintrag enthalten ist, wie durch die ssh -vv übereinstimmenden Zeilen angezeigt: Applying options for.

Im allgemeinen Fall bedeutet dies, Host *dasszuletzt.

verwandte Informationen