Wie kann ich meinen privaten SSH-Schlüssel dauerhaft zum Schlüsselbund hinzufügen, damit er automatisch für ssh verfügbar ist?

Es scheint, dass ssh-add -K ~/.ssh/id_rsadas Ihren Schlüssel lädt, aber bei jedem Neustart nach dem Passwort fragt.

Ich suche nach einer Lösung, bei der ich das Schlüsselkennwort zwischen den Anmeldungen nicht erneut eingeben muss.

Können Sie etwas mehr darüber sagen, wann die Passwortabfrage für Sie erscheint? Ich frage, weil ich einen ssh-Schlüssel für einen Remote-Server habe, der, wie ich Ihnen versichere, nicht mit meinem Mac-Anmeldepasswort oder so identisch ist, und ich das Passwort für den ssh-Schlüssel seit Jahren nicht mehr eingeben musste . Ich kann einfach ein Terminal öffnen, "ssh <server>" eingeben und schon bin ich da. Ich glaube, ich habe diesen Schlüssel zuerst unter OSX 10.5 eingerichtet. id_dsa, aber ich denke nicht, dass das wichtig sein sollte.
Auf meinem id_rsaSchlüssel ist ein Passwort.
Ich habe auch das Problem, dass ich das schon so lange gelöst habe, dass ich mich nicht mehr genau erinnern kann, was ich getan habe. Aber ich denke, die Idee ist, nicht zu laufen ssh-add, sondern einfach sshdirekt zu laufen. Sie sollten ein Fenster öffnen, das als Passphrase für den Schlüssel dient, und mit einem Kontrollkästchen, mit dem Sie ihn in Ihrem Schlüsselbund speichern können.
@Sorin - meins auch! Ich musste es vor langer Zeit einmal eingeben, und der Mac hat es seitdem für mich gespeichert. Hoffentlich hilft Haralds Rat.
Meinen Sie das Schlüsselbund-Passwort (dh Ihr Anmeldepasswort) oder die Passphrase des Schlüssels? Wenn letzteres der Fall ist, sind Ihre Passphrasen definitiv im Schlüsselbund gespeichert? Sie können dies überprüfen, indem Sie die Schlüsselbundverwaltung öffnen und im Login-Schlüsselbund danach suchen.
Ich mache dies, um es zu lösen, ref: unix.stackexchange.com/a/560404/388990 Hoffe, es funktioniert, danke
Ich mache dies, um es zu lösen, ref: unix.stackexchange.com/a/560404/388990 Hoffe, es funktioniert, danke
@ToniFirnandes Diese Anweisungen, auf die Sie verweisen, sind veraltet. Man sollte die akzeptierte Antwort unten verwenden.

Antworten (7)

Es ist nicht möglich, einen privaten Schlüssel zum Schlüsselbund hinzuzufügen, aber Sie können die Passphrase für den privaten Schlüssel im Schlüsselbund speichern. Unter OSX hat der native ssh-addBefehl ein spezielles Argument, um die Passphrase des privaten Schlüssels im OSX-Schlüsselbund zu speichern, was bedeutet, dass Ihre normale Anmeldung ihn für die Verwendung mit ssh entsperrt. Unter OSX Sierra und höher müssen Sie SSH auch so konfigurieren, dass immer der Schlüsselbund verwendet wird (siehe Schritt 2 unten).

Alternativ können Sie einen Schlüssel ohne Passphrase verwenden, aber wenn Sie die Sicherheit bevorzugen, ist dies bei diesem Workflow sicherlich akzeptabel.

Schritt 1 – Passphrase im Schlüsselbund speichern

In der neuesten Version von MacOS (12.0 Monterey) tun Sie dies nur einmal:

ssh-add --apple-use-keychain ~/.ssh/[your-private-key]

Oder verwenden Sie in Versionen von MacOS älter als 12.0 Monterey:

ssh-add -K ~/.ssh/[your-private-key]

Geben Sie Ihre Schlüssel-Passphrase ein und Sie werden nicht noch einmal danach gefragt.

(Wenn dies fehlschlägt, stellen Sie sicher, dass Sie die Apple-Version von verwenden /usr/bin/ssh-addund nicht etwas, das mit brew usw. installiert wurde; überprüfen Sie mit which ssh-add)

Schritt 2 – Konfigurieren Sie den SSH-Agent so, dass er immer den Schlüsselbund verwendet

(Hinweis: In Versionen von OSX vor Sierra ist dies nicht erforderlich)

Es scheint, dass OSX Sierra das bequeme Verhalten entfernt hat, Ihre Schlüssel zwischen den Anmeldungen beizubehalten, und das Update auf ssh verwendet standardmäßig nicht mehr den Schlüsselbund. Aus diesem Grund müssen Sie eine weitere Sache für die sichere dauerhafte Schlüsselspeicherung ändern.

Die Lösung wird in diesem Github-Thread-Kommentar skizziert . Folgendes tun Sie:

  1. Stellen Sie sicher, dass Sie Schritt 1 oben abgeschlossen haben, um die Passphrase im Schlüsselbund zu speichern.

  2. Falls noch nicht geschehen, erstellen Sie eine ~/.ssh/configDatei. Mit anderen Worten, erstellen Sie im .sshVerzeichnis Ihres Home-Verzeichnisses eine Datei namens config.

  3. Fügen Sie in dieser .ssh/configDatei die folgenden Zeilen hinzu:

     Host *
       UseKeychain yes
       AddKeysToAgent yes
       IdentityFile ~/.ssh/id_rsa
    

    Wechseln ~/.ssh/id_rsaSie zum tatsächlichen Dateinamen Ihres privaten Schlüssels. Wenn Sie andere private Schlüssel in Ihrem ~/.sshVerzeichnis haben, fügen Sie auch IdentityFilefür jeden davon eine Zeile hinzu. Zum Beispiel habe ich eine zusätzliche Zeile, die IdentityFile ~/.ssh/id_ed25519für einen 2. privaten Schlüssel liest.

    Das UseKeychain yesist der Schlüsselteil, der SSH anweist, in Ihrem OSX-Schlüsselbund nach der Schlüssel-Passphrase zu suchen.

  4. Das ist es! Wenn Sie das nächste Mal eine SSH-Verbindung laden, versucht es die von Ihnen angegebenen privaten Schlüssel und sucht nach deren Passphrase im OSX-Schlüsselbund. Keine Passphrase-Eingabe erforderlich.

Das hat bei mir fast funktioniert. Bei meinem "Anmelde"-Schlüsselbund war die automatische Sperre bereits deaktiviert, daher traf die Antwort von Matthew Sanabria nicht zu. Using ssh-add -K ...fügte dem ssh-Agenten die Schlüssel hinzu, ohne nach einem Passwort zu fragen, aber nur für die aktuelle Sitzung. Nach einem Neustart musste ich den Befehl erneut ausgeben.
Irgendwie mache ich das ssh-add -K und es funktioniert eine Weile und fordert mich dann plötzlich wieder zur Eingabe eines Passworts auf. Nicht sicher, ob dies mit iterm oder oh my zsh-Updates zu tun hat?
@Poulsbo & @Abram - siehe mein Update, Sierra hat das automatische Verhalten geändert und jetzt müssen Sie ssh-add -Amanuell ausführen, um Ihren gespeicherten Schlüsselbund zu laden. Einige mögliche Lösungen, auf die oben verwiesen wird.
@trisweb Danke für den Tipp. Joshbucheas Lösung zum Ändern der .ssh/configDatei sieht vielversprechend aus! Siehe github.com/lionheart/openradar-mirror/issues/…
@trisweb Überprüfen Sie den vorherigen Kommentar. Ich denke, dass dies eine gute Problemumgehung für die Notwendigkeit sein kann, die ssh-addBash-Anmeldung auszuführen, zumal nicht jeder die Bash-Shell verwendet. Bitte aktualisieren Sie die Antwort, sobald Sie die Bestätigung haben, dass es funktioniert.
@sorin sehen Sie sich die aktualisierte Antwort an und lassen Sie mich wissen, wenn Sie Feedback haben. Danke!
Das Bearbeiten von 'config' funktioniert unter MacOS hervorragend, schlägt jedoch unter Linux fehl (Schlechte Konfigurationsoption: UseKeychain). Gibt es eine Möglichkeit, eine Konfigurationsdatei zu schreiben, die auf beiden funktioniert?
Funktioniert super! In meinem Fall musste ich das AFlag zusätzlich zu dem verwenden K, um meine Schlüssel zum Schlüsselbund hinzuzufügen und die Passphrase darin zu registrieren ( ssh-add -AK ~/.ssh/[your-private-key]). Danke!
@wcochran Ich stoße auch auf diesen. Dies macht Pläne, Dotfiles plattformübergreifend gemeinsam zu halten, wirklich zunichte.
Eine Sache, an die Sie sich erinnern sollten: Es ist NICHT im OpenSSH-Upstream, nur in den Apple [Mm]acOS(X)-Versionen. Es gibt an anderer Stelle Rezepte, wie man /usr/bin/ssh-add automatisch die Schlüssel hinzufügt, damit /usr/local/bin/ssh (OpenSSH über brew etc.) den User-Agent verwenden kann
Erhaltene Nachricht unter macOS 10.13.2: Bad configuration option: usekeychain.
@wcochran und @ctt - in Apples Technical Note OpenSSH-Updates in macOS 10.12.2 raten sie zur Verwendung IgnoreUnknown UseKeychainfür Cross-Kompatibilität.
Selbst mit der usekeychain-Option finde ich immer noch, dass mein Schlüsselbund den .ssh/id_rsa-Schlüssel beim Neustart fallen lässt.
Ich habe genau dasselbe getan und mein Mac lässt den Schlüssel beim Neustart immer noch fallen.
Neuer Mac - es gibt kein A- oder K-Flag, muss es immer noch bei jedem Neustart tun
Leider ist diese Antwort nicht mehr gültig, es gibt keine Option K mehr
@Matteo -- vergewissern Sie sich, dass Sie die Apple-Version von verwenden ssh-add; Wenn Sie Homebrew oder ein anderes SSH installiert haben, wird es möglicherweise überschrieben. Verwenden Sie which ssh-add, um herauszufinden, welches; die Apple-Version ist unter /usr/bin/ssh-add. Stellen Sie sicher , dass /usr/binIhr $PATH Priorität hat, wenn dies der Fall ist.
@trisweb Überprüfen Sie einfach die Apple-Versionshinweise, sie sind mit dem Rest der Welt abgestimmt und es gibt keine K- oder A-Option mehr
@Matteo Ich habe Catalina installiert und die ssh-add -KOption ist immer noch vorhanden und funktioniert einwandfrei. Überprüfen Sie, ob Sie das Recht verwenden ssh-addoder ob es andere Unterschiede in Ihrer Umgebung gibt.
@triswed Sehr gut, ich habe nicht vor, zu Catalina zu wechseln, nur um das zu haben
@Matteo ist auch in allen MacOS-Versionen vor Catalina vorhanden; es ist weiterhin auf Catalina vorhanden. Kein Problem.
Ich kann bestätigen, dass dies in Catalina immer noch funktioniert. Das IdentityFileist nicht unbedingt erforderlich, wenn die Standardschlüsselnamen verwendet werden.
Weiß jemand, wie man angeben kann, in welchem ​​Schlüsselbund das Passwort gespeichert wird?
Wie @youssman erwähnte, musste ich auch die -AKFlags verwenden, da in OS Catalina 10.15.6 nur -kein Flag verwendet wird, um jeweils nur einen Schlüssel zu speichern, egal wie oft ich ihn hinzugefügt habe, nur einer wurde gespeichert, wenn ich sie mit konsultierte ssh-add -l.
Der Kommentar von @Matteo ist entscheidend: Stellen Sie sicher, dass Sie verwenden/usr/bin/ssh-add -K !
In Monterey -Kscheint es durch ersetzt worden zu sein --apple-use-keychain.
Danke, dass du das gepostet hast! Übrigens heißen diese Optionen unter macOS Monterey jetzt --apple-load-keychainund --apple-use-keychain, und ein großes WARNINGwird gedruckt, wenn Sie versuchen, die alten Namen zu verwenden. Dies liegt daran, dass Upstream-SSH -Kals neue Option hinzugefügt wurde, um „residente Schlüssel von einem FIDO-Authentifikator zu laden“.
Ich habe das gemacht und es funktioniert, aber aus irgendeinem Grund werde ich beim SSH nicht nach dem Schlüsselbund-Passwort gefragt, nicht einmal beim ersten Mal. Ich hatte den Eindruck, dass beim Hinzufügen zum Schlüsselbund die Passphrase verschlüsselt bleibt, sodass Personen, die Zugriff auf meinen Computer erhalten und alle meine verschlüsselten privaten Schlüssel kopieren können, nicht auch die Passphrase kopieren können?

Ich hatte ein ähnliches Problem, da ich jedes Mal nach meiner Pub-Key-Passphrase gefragt wurde. Auf Vorschlag des Benutzers "trisweb" oben habe ich diese Optionen aktiviert auf ~/.ssh/config:

Host *
  UseKeychain yes
  AddKeysToAgent yes
  IdentityFile ~/.ssh/id_rsa

Aber es wurde immer noch jedes Mal aufgefordert, wenn ich ssh verwenden wollte. Schließlich schaltete ich ein ssh -vund fand diese Debug-Zeile:

debug1: key_load_private: incorrect passphrase supplied to decrypt private key

Ich habe dann meinen Schlüsselbund in "Keychain Access.app" geöffnet, den Schlüssel mit dem Namen "SSH: /Users/username/.ssh/id_rsa" gefunden und ihn geöffnet. Ich habe auf „Passwort anzeigen“ geklickt, um das Passwort offenzulegen, und tatsächlich festgestellt, dass die Passphrase im Schlüsselbund eine alte Passphrase war. Ich habe die Passphrase in der Schlüsselbundverwaltung aktualisiert, und jetzt funktioniert die Passwortfreiheit.

Ich hätte die Passphrase auch mit diesem Satz aktualisieren können:

ssh-keygen -p -f ~/.ssh/id_rsa
Auf meinem Mac wird das Passwort in der Kategorie „Passwort“ der „iCloud“-Kette gespeichert. Ich dachte, es wäre in der "Anmelden" -Kette.

Für alle, bei denen das oben Genannte nicht funktioniert hat, scheint mein Problem darauf zurückzuführen zu sein, dass ich das UseKeychain yes& AddKeysToAgent yesin allen ssh-Schlüsselprofilen / -Verknüpfungen dupliziert habe. Ich habe meine ~/.ssh/configDatei aktualisiert, um diese nur einmal zu deklarieren, und sie werden jetzt alle beim Anmelden geladen, ohne beim Start nach Passwörtern zu fragen, z.

Host foo
  HostName foo.com
  User fooUser
  IdentityFile ~/.ssh/foo

Host bar
  HostName bar.com
  User barUser
  IdentityFile ~/.ssh/bar

########################
# Keep the default configuration 
#  as the last item in this file
Host *
  UseKeychain yes
  AddKeysToAgent yes
  IdentityFile ~/.ssh/foo
  IdentityFile ~/.ssh/bar
Ich würde empfehlen Host *, nach bestimmten Host-Regeln zu sein. Siehe man ssh_configfür Details.
Vielen Dank dafür. Wo sind die Dokumente dafür, dh wie hast du das ausgearbeitet?
...eigentlich hat das bei mir nicht funktioniert: Ich habe ein Setup, bei dem die Hostleiste auch den Hostnamen foo.com hat (dh zwei verschiedene Konfigurationen für dieselbe Site). IdentityFile ~/.ssh/foowurde immer verwendet. Um das Problem zu beheben, musste ich den Abschnitt Host * nach unten verschieben, wie @FranklinYu vorschlägt. Ich denke, das liegt daran, dass > für jeden Parameter der erste erhaltene Wert verwendet wird. linux.die.net/man/5/ssh_config

Außerdem wird in macOS Sierra und High Sierra (ich weiß nichts über frühere Versionen) ssh-add -Ader Agent ausgeführt, um alle Schlüssel zu laden, deren Passphrasen auf dem Schlüsselbund gespeichert sind ... Also sehr praktisch

Beachten Sie, dass diese Optionsflags umbenannt wurden und die alten in späteren Versionen von macOS veraltet sind. Aus der sshManpage:

APPLE_SSH_ADD_BEHAVIOR
Aktiviert oder deaktiviert die ältere Verarbeitung der -Aund -Optionen -K, die in früheren macOS-Versionen verwendet wurden. Diese Optionen wurden umbenannt --apple-load-keychainbzw. Verhalten sich jedoch und immer noch wie in früheren Versionen, außer unter den folgenden Umständen :--apple-use-keychain
-A-K

  • Wenn ein Sicherheitsanbieter mit -Soder SSH_SK_PROVIDER angegeben wurde oder wenn APPLE_SSH_ADD_BEHAVIOR auf den Wert „openssh“ gesetzt ist, wird ssh-adddas standardmäßige OpenSSH-Verhalten verwendet: Das -AFlag wird nicht erkannt und das -KFlag verhält sich wie im Abschnitt „BESCHREIBUNG“ oben dokumentiert.
  • Ansonsten verhält sich ssh-add -Aund -Kwie in früheren macOS-Versionen. Es wird eine Warnung zum Standardfehler ausgegeben, es sei denn, APPLE_SSH_ADD_BEHAVIOR ist auf den Wert „macos“ gesetzt. Hinweis: Zukünftige Versionen von macOS werden weder -Anoch -Kohne das Setzen dieser Umgebungsvariable unterstützen.
Dies ist nicht erforderlich, wenn man ssh gemäß der akzeptierten Antwort nur richtig konfiguriert.

Antwort auf OSX 12.0 Monterey

Genau das können Sie jetzt mit der Flagge --apple-use-keychainerreichen.

ssh-add --apple-use-keychain ~/.ssh/id_rsa 

Fügen Sie dies zu Ihrer .zshrcoder .bashrc-Datei hinzu, damit es bei neuen Anmeldungen / Terminalinstanzen aus Ihrem Schlüsselbund geladen wird.

Dies ersetzt die Flags -Kund :-A

WARNING: The -K and -A flags are deprecated and have been replaced
         by the --apple-use-keychain and --apple-load-keychain
         flags, respectively.  To suppress this warning, set the
         environment variable APPLE_SSH_ADD_BEHAVIOR as described in
         the ssh-add(1) manual page.
Dies ist überflüssig, wenn Sie ssh nur einmal korrekt konfigurieren , gemäß der akzeptierten Antwort.
Diese Möglichkeit gibt es nicht mehr...
@airtonix Auf welcher Betriebssystemversion bist du? Funktioniert bei mir am 12.1.
Auch hier musste ich ssh-add --apple-load-keychain -qzu meiner .zshrcAkte hinzufügen.

Eine der Lösungen besteht darin, .ssh aus dem Pfad zu löschen. So - "ssh-add --apple-use-keychain ~/id_ed25519" oder "ssh-add --apple-use-keychain ~/[IHRE ID VON SSH]"

Außerdem müssen Sie den Pfad in ~/.ssh/config ändern, indem Sie /.ssh löschen

Fügen Sie den öffentlichen Schlüssel hinzu in:

.ssh/known_hosts

Öffentliche Schlüssel sind normalerweise auf:

/home/user/.ssh/id_rsa.pub

Ich hoffe, das hilft

Ich denke, dieauthorized_keys
Wie auch immer, das funktioniert nicht, wenn Sie mehr als einen Schlüssel haben!