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

419

Es scheint, dass ssh-add -K ~/.ssh/id_rsaIhr Schlüssel geladen wird, Sie jedoch bei jedem Neustart nach dem Kennwort gefragt werden.

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

Sorin
quelle
1
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. Ich versichere, dass Sie nicht mit meinem Mac-Anmeldekennwort identisch sind, und ich musste das Kennwort für den SSH-Schlüssel seit Jahren nicht mehr eingeben . Ich kann einfach ein Terminal öffnen, "ssh <server>" eingeben und bin dabei. Ich glaube, ich habe diesen Schlüssel zuerst unter OSX 10.5 eingerichtet. id_dsa, aber ich denke nicht, dass das wichtig sein sollte.
Michael H.
Mein id_rsaSchlüssel hat ein Passwort.
Sorin
Ich habe auch das Problem, dass ich das vor so langer Zeit gelöst habe, dass ich mich nicht genau erinnern kann, was ich getan habe. Aber ich denke die Idee ist nicht zu rennen ssh-add, sondern einfach sshdirekt zu rennen . Sie sollten ein Fenster mit der Passphrase für den Schlüssel und einem Kontrollkästchen zum Speichern in Ihrem Schlüsselbund erhalten.
Harald Hanche-Olsen
1
@ Sorin - meine auch! Ich musste es vor langer Zeit einmal eingeben und der Mac hat es seitdem für mich gespeichert. Hoffentlich hilft Haralds Rat.
Michael H.
Meinen Sie das Schlüsselbundkennwort (dh Ihr Anmeldekennwort) oder die Passphrase des Schlüssels? Wenn es das letztere ist, sind Ihre Passwörter definitiv im Schlüsselbund gespeichert? Sie können dies überprüfen, indem Sie den Schlüsselbund öffnen und ihn im Anmeldeschlüsselbund suchen.
Mathew Hall

Antworten:

687

Unter OSX hat der native ssh-addClient ein spezielles Argument, um die Passphrase des privaten Schlüssels im OSX-Schlüsselbund zu speichern. Dies bedeutet, dass Ihre normale Anmeldung diese 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 mit diesem Workflow durchaus akzeptabel.

Schritt 1 - Bewahren Sie den Schlüssel im Schlüsselbund auf

Mach das einfach einmal:

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

Geben Sie Ihre Passphrase ein, und Sie werden nicht mehr danach gefragt.

(Wenn Sie mit einer Vorgängerversion von OSX arbeiten, ist Schritt 2 nicht erforderlich.)

Schritt 2 - Konfigurieren Sie SSH so, dass immer der Schlüsselbund verwendet wird

Es scheint, dass OSX Sierra das unangenehme 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 werden Sie nach dem Upgrade und nach jedem Neustart aufgefordert, die Passphrase für einen Schlüssel einzugeben.

Die Lösung ist ziemlich einfach und wird in diesem Github-Thread-Kommentar beschrieben . So richten Sie es ein:

  1. Stellen Sie sicher, dass Sie Schritt 1 oben ausgeführt haben, um den Schlüssel im Schlüsselbund zu speichern.

  2. Falls noch nicht geschehen, erstellen Sie eine ~/.ssh/configDatei. Mit anderen Worten, .ssherstellen Sie in dem Verzeichnis in Ihrem Ausgangsverzeichnis eine Datei mit dem Namen config.

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

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

    Ändern Sie ~/.ssh/id_rsaden tatsächlichen Dateinamen Ihres privaten Schlüssels. Wenn Sie andere private Schlüssel in Ihrem ~.sshVerzeichnis haben, fügen Sie IdentityFilefür jeden auch eine Zeile hinzu. Zum Beispiel habe ich eine zusätzliche Zeile, in der IdentityFile ~/.ssh/id_ed25519nach einem zweiten privaten Schlüssel gesucht wird.

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

  4. Das ist es! Wenn Sie das nächste Mal eine SSH-Verbindung laden, werden die von Ihnen angegebenen privaten Schlüssel geprüft und im OSX-Schlüsselbund nach ihrer Passphrase gesucht. Keine Passworteingabe erforderlich.

Trisweb
quelle
2
Das hat bei mir fast geklappt. Bei meinem "Login" -Schlüsselbund war die automatische Sperre bereits deaktiviert, sodass Matthew Sanabrias Antwort nicht zutraf. Mit werden ssh-add -K ...die Schlüssel zum ssh-Agenten hinzugefügt, ohne dass Sie zur Eingabe eines Kennworts aufgefordert werden, jedoch nur für die aktuelle Sitzung. Nach einem Neustart musste ich den Befehl erneut ausgeben.
Poulsbo
4
@Poulsbo & @Abram - siehe mein Update, Sierra hat das automatische Verhalten geändert und jetzt musst du ssh-add -Amanuell starten , um deinen gespeicherten Schlüsselbund zu laden. Einige mögliche Lösungen, auf die oben verwiesen wurde.
Trisweb
3
@trisweb Danke für den Tipp. Die Lösung von joshbuchea, die .ssh/configDatei zu modifizieren , sieht vielversprechend aus! Siehe github.com/lionheart/openradar-mirror/issues/…
Poulsbo
2
@ Sorin sehen Sie die aktualisierte Antwort, und lassen Sie mich wissen, wenn Sie Feedback haben. Vielen Dank!
Trisweb
9
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]). Vielen Dank!
Youssman
22

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 für ~ / .ssh / config aktiviert:

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

ABER es hat mich jedes Mal, wenn ich ssh benutzen wollte, dazu aufgefordert.

Schließlich habe ich "ssh -v" aktiviert und diese Debug-Zeile gefunden:

debug1: key_load_private: falsche Passphrase zum Entschlüsseln des privaten Schlüssels

Dann öffnete ich meinen Schlüsselbund in "Keychain Access.app", fand den Schlüssel mit dem Namen "SSH: /Users/username/.ssh/id_rsa" und öffnete ihn.

Ich habe auf "Passwort anzeigen" geklickt, um das Passwort offenzulegen, und in der Tat festgestellt, dass die Passphrase im Schlüsselring eine alte Passphrase war.

Ich habe die Passphrase in Keychain Access aktualisiert und jetzt funktioniert sie auch ohne Passwort.

Ich hätte auch die Passphrase mit dieser Phrase aktualisieren können:

ssh-keygen -p -f ~ / .ssh / id_rsa

user2688272
quelle
13

Sie werden jedes Mal zur Eingabe des Passworts aufgefordert, da Ihr "Login" -Schlüsselbund nach Inaktivität und / oder Ruhezustand oder in Ihrem Fall nach einem Neustart gesperrt wird. Es gibt zwei Möglichkeiten, dies für Sie zu lösen.

  1. Ändern Sie die Einstellungen für Ihren "Login" -Schlüsselbund. Angenommen, Ihr SSH-Schlüssel ist im "Login" -Schlüsselbund gespeichert.

    • Öffnen Sie den Schlüsselbund
    • Markieren Sie den "Login" -Schlüsselbund
    • Klicken Sie mit der rechten Maustaste oder bei gedrückter Wahltaste auf den Schlüsselbund "Anmelden"
    • Deaktivieren Sie die Kontrollkästchen "Nach x Minuten Inaktivität sperren" und "Beim Schlafen sperren".
  2. Generieren Sie einen weiteren SSH-Schlüssel, ohne eine Passphrase zu verwenden.

    • Öffnen Sie das Terminal.
    • Befehl eingeben: ssh-keygen -t rsa -b 4096 -C <comment> -f <.ssh/id_rsa>
    • -t ist für Typ, -b ist Schlüsselgröße, -C ist Kommentar, -f Ausgabedatei (Verzeichnisse müssen zuerst erstellt werden)
    • Legen Sie keine Passphrase fest.
    • Importieren Sie den SSH-Schlüssel in den "Login" -Schlüsselbund mit ssh-add -K <path to ssh key>

Sie sollten nicht mehr zur Eingabe eines Schlüsselbundkennworts aufgefordert werden.

Matthew Sanabria
quelle
2
Beachten Sie, dass beim Aufruf ssh-addaus SSH heraus security unlock-keychainzuerst aufgerufen werden muss. Außerdem musste ich keine Verzeichnisse für den -fParameter erstellen . Leider musste ich immer noch security unlocl-keychainSSH-Sitzungen anrufen, um auf den Anmeldeschlüsselbund zuzugreifen, der jedes Mal zur Eingabe eines Kennworts auffordert ...
Ohad Schneider,
2
Der springende Punkt ist, eine Passphrase auf dem Schlüssel zu haben. Ich bezweifle, dass das Generieren eines neuen SSH-Schlüssels für die Frage hilfreich ist.
Gray
7

Unter macOS Sierra und HighSierra (keine Informationen zu früheren Versionen) ssh-add -Awird der Agent beim Ausführen dazu gebracht, alle Schlüssel zu laden, deren Passphrasen im Schlüsselbund gespeichert sind. Sehr praktisch

JJarava
quelle
7

Für alle, bei denen das oben Genannte nicht funktioniert hat, scheint mein Problem darin zu liegen, dass ich das UseKeychain yes& AddKeysToAgent yesin allen SSH-Schlüsselprofilen / -Verknüpfungen dupliziert habe . Ich habe meine ~/.ssh/configDatei so aktualisiert , dass sie nur einmal deklariert wird. Jetzt werden alle beim Anmelden geladen, ohne dass beim Start nach Passwörtern gefragt wird. Beispiel:

Host *
  UseKeychain yes
  AddKeysToAgent yes
  IdentityFile ~/.ssh/foo
  IdentityFile ~/.ssh/bar

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

Host bar
  HostName bar.com
  User barUser
  IdentityFile ~/.ssh/bar
Avolition
quelle
-3

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

.ssh/known_hosts

Öffentliche Schlüssel sind normalerweise aktiviert:

/home/user/.ssh/id_rsa.pub

Ich hoffe, das hilft

lluisi
quelle
8
Ich denke, meine dieauthorized_keys
Rene Larsen
Auf jeden Fall funktioniert das nicht, wenn Sie mehr als einen Schlüssel haben!
Sorin