Wie verwende ich Mac OS X Keychain mit SSH-Schlüsseln?

133590
John Topley

Ich verstehe, dass der Schlüsselbund seit Mac OS X Leopard das Speichern von SSH-Schlüsseln unterstützt. Könnte jemand bitte erklären, wie diese Funktion funktionieren soll.

Ich habe einige generierte RSA-Schlüssel in meinem Verzeichnis ~ / .ssh für den Zugriff auf verschiedene Server gespeichert. Ich habe keine Passwörter für diese Tasten. Um mich an diesen Servern anzumelden, verwende ich im Terminal folgende Befehle:

eval "ssh-agent" ssh-add ~ / .ssh / some_key_rsa ssh Benutzer @ Server 

(Ich habe einige Bash-Funktionen geschrieben, um das zu erleichtern.)

Gibt es einen besseren Weg, dies mit dem Schlüsselbund zu tun?

133

9 Antworten auf die Frage

245
jeffmcc

Seit der Leopard-Version von OS X ist ssh-agent enger in Keychain integriert. Es ist möglich, die Passphrasen aller SSH-Schlüssel sicher in Keychain zu speichern, von denen der ssh-agent sie beim Start liest. Unter dem Strich ist es einfach, Ihre Schlüssel mit Passphrasen zu sichern, aber Sie müssen niemals die Passphrase eingeben, um sie zu verwenden! Hier ist, wie:

Fügen Sie die Passphrase zu jedem SSH-Schlüssel zum Schlüsselbund hinzu: (Option -k lädt nur private Schlüssel, überspringt Zertifikate)

ssh-add -K [path/to/private SSH key] 

(Beachten Sie, dass es sich um eine Hauptstadt K handelt)

Wenn Sie Ihren Mac neu starten, werden alle SSH-Schlüssel in Ihrem Schlüsselbund automatisch geladen. Sie sollten die Schlüssel in der App "Keychain Access" sowie von der Befehlszeile aus sehen können:

ssh-add -l 
Dies sollte die akzeptierte Antwort sein. Kris vor 12 Jahren 30
Die akzeptierte Antwort beantwortet die Frage dieses bestimmten Benutzers, aber diese beantwortet die Frage des generischen Benutzers eqzx vor 11 Jahren 2
das ist die beste Antwort RichVel vor 11 Jahren 1
`ssh-add -l` listet keine Tasten auf, wenn eine Remote-Verbindung hergestellt wird (wobei $ DISPLAY nicht festgelegt ist). Hier müssen spezielle Tricks verwendet werden, um den Schlüsselbund zu verwenden (z. B. in https://superuser.com/questions/141044/sharing-the-same-ssh-agent-among-multiple-login-sessions). Ether vor 9 Jahren 0
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/ssh-add.1.html Sie benötigen auch die Option -K, um Passphrasen im Schlüsselbund zu speichern. Neeme Praks vor 9 Jahren 2
Sie müssen dazu ein Großbuchstabe "K" anstelle von Kleinbuchstaben verwenden. Wenn Sie die ssh-add-Hilfeinformationen laden, wird angezeigt, dass die Capitol-Version im Schlüsselbund gespeichert ist. pthurmond vor 9 Jahren 0
Wenn Sie eine andere Version von SSH über ein Paketsystem wie Homebrew installiert haben, müssen Sie einen absoluten Pfad wie `/ usr / bin / ssh-add` verwenden. Ludovic Kuty vor 8 Jahren 5
Der Kommentar von @LudovicKuty sollte Teil der Antwort sein ... OS X verwendet eine benutzerdefinierte Version von `ssh-add` n1000 vor 8 Jahren 0
Ich habe die Antwort bearbeitet, um sie hinzuzufügen, aber ich habe vergessen, mich vorher anzumelden. Wird von Experten begutachtet ...: p Ludovic Kuty vor 8 Jahren 0
Interessanterweise fragt es mein macOS Sierra nach einem Neustart nicht nach dem Passwort, aber "ssh-add -l" gibt "Der Agent hat keine Identitäten" zurück. (`ps aux` beinhaltet` / usr / bin / ssh-agent -l`). Halil Özgür vor 7 Jahren 1
Bei macOS Sierra haben sich die Dinge geändert. Siehe https://github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain schieferstapel vor 7 Jahren 3
`ssh-add -K` .. noch etwas zu merken oder hinzuzufügen, um Skripte zu starten :-) user260758 vor 7 Jahren 0
73
Ricardo Sanchez-Saez

Ab macOS Sierra, ssh-agent nicht mehr Auto-Lasten vorher SSH - Schlüssel geladen, wenn Sie sich in Ihrem Konto anmelden. Dies ist beabsichtigt für Apple, sie wollten sich mit der Mainstream- OpenSSH- Implementierung neu ausrichten . [1]


Wie hier erklärt, ist dies seit macOS 10.12.2 die empfohlene Methode :

  1. Fügen Sie Ihrer ~/.ssh/configDatei folgende Zeilen hinzu :

    Host * UseKeychain yes AddKeysToAgent yes 
  2. Jeder Schlüssel, den Sie mit dem Befehl zum ssh-agent hinzufügen, ssh-add /path/to/your/private/key/id_rsawird automatisch zum Schlüsselbund hinzugefügt und sollte beim Neustart automatisch geladen werden.


Folgendes ist veraltet (wird als Referenz verwendet).

Um zum vorherigen Verhalten zurückzukehren, möchten Sie den ssh-add -ABefehl ausführen (der alle ssh-Schlüssel mit Passphrasen in Ihrem Schlüsselbund automatisch lädt), wenn Sie sich anmelden. Gehen Sie hierzu folgendermaßen vor:

  1. Fügen Sie zunächst alle Schlüssel, die Sie mit dem Befehl automatisch zum ssh-agent laden möchten, hinzu ssh-add -K /absolute/path/to/your/private/key/id_rsa. Das -KArgument stellt sicher, dass die Schlüsselpassphrase zum Schlüsselbund von macOS hinzugefügt wird . Stellen Sie sicher, dass Sie den absoluten Pfad zum Schlüssel verwenden. Wenn Sie einen relativen Pfad verwenden, wird das automatisch gestartete Skript Ihren Schlüssel nicht finden.

  2. Stellen Sie sicher, dass alle Ihre Schlüssel bei der Eingabe als hinzugefügt angezeigt werden ssh-add -A.

  3. Erstellen Sie eine Datei mit dem Namen com.yourusername.ssh-add.plistin ~/Library/LaunchAgents/den Inhalten unten. Plist-Dateien wie diese werden von launchdScripts verwendet, wenn Sie sich anmelden. [2] [3]

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.user.loginscript</string> <key>ProgramArguments</key> <array> <string>ssh-add</string> <string>-A</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist> 
  4. Bitte geben Sie launchddie laden plist - Datei die Sie gerade erstellt durch die Ausführung: launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist.

Und du solltest fertig sein.

Siehe auch: https://apple.stackexchange.com/questions/48502/how-can-i-permanently-add-my-ssh-private-key-to-keychain-so-it-is-is-is- automatisch slm vor 7 Jahren 0
29
ChrisJF

Es gibt einen einfacheren Weg als Ricardos Antwort, um Ihr Passwort zwischen Sitzungen / Neustarts Ihres Mac mit 10.12 Sierra aufrechtzuerhalten.

  1. ssh-add -K ~/.ssh/id_rsa
    Hinweis: Ändern Sie den Pfad dahin, wo sich Ihr id_rsa-Schlüssel befindet.
  2. ssh-add -A
  3. Erstellen Sie die folgende ~/.ssh/configDatei (oder bearbeiten Sie sie, falls vorhanden) :

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

    Jetzt wird das Passwort zwischen Neustarts gespeichert!

Apple hat das Verhalten für den ssh-agent in macOS 10.12 Sierra absichtlich so geändert, dass die vorherigen SSH-Schlüssel nicht mehr automatisch geladen werden, wie in diesem OpenRadar-, Twitter-Diskussions- und Technischen Hinweis von Apple erwähnt . Die obige Lösung wird das alte Verhalten von El Capitan nachahmen und sich an Ihr Passwort erinnern.

Toll, funktioniert wie ein Zauber, imho viel sauberer als die anderen und an der richtigen Stelle gelöst :) GerardJP vor 7 Jahren 1
16
Rudedog

Damit es funktioniert, sollte auf die $SSH_AUTH_SOCKUmgebungsvariable verwiesen werden /tmp/launch-xxxxxx/Listeners. Dies soll automatisch geschehen, wenn Sie sich anmelden. Der Listener an diesem Socket spricht das Protokoll ssh-agent.

Ihre bash-Skripts starten Ihren eigenen ssh-Agenten (buchstabiert ssh-agent, nicht ssh_agent) und überschreiben den ssh-agentfür Sie bei der Anmeldung eingerichteten Status .

Der Schlüsselpunkt des Schlüssels besteht auch darin, die Passwörter in Ihren SSH-Schlüsseln zu speichern, aber Sie sagen, dass für diese Schlüssel keine Passphrasen festgelegt sind. Ich bin mir also nicht sicher, was Sie von der Schlüsselbundintegration erwarten.

Wenn Sie sich zum ersten Mal anmelden, wird wahrscheinlich kein ssh-agent-Prozess angezeigt. Dieser Vorgang wird automatisch durch Startdienste gestartet, wenn zum ersten Mal versucht wird, diesen Socket einzulesen /tmp.

Vielen Dank. Also muss ich noch `ssh-add` ausführen, um meine RSA-Identitäten dem beim Anmelden gestarteten ssh-Agenten hinzuzufügen. John Topley vor 14 Jahren 1
Sie müssen nicht ssh-add ausführen. ssh-agent fragt beim ersten Start von ssh nach der Passphrase des Schlüssels. Rudedog vor 14 Jahren 0
Es fordert mich jedes Mal zur Eingabe des Kennworts auf, wenn ich ssh ausführt. Der Punkt ist, dass ich keine Passwörter eingeben muss. John Topley vor 14 Jahren 3
Was fordert Sie auf, das Passwort einzugeben? Ich fange an zu vermuten, dass es der Remoteserver ist, der Sie dazu auffordert, die Aussage, dass Ihre Schlüssel keine Passwörter haben, in eine bessere Perspektive zu setzen. Wenn Sie das Kennwort auf dem Remote-Server umgehen möchten, müssen Sie Ihren öffentlichen Schlüssel zu $ ​​HOME / .ssh / authorised_keys auf diesem Server hinzufügen. Der ssh-agent + -Schlüsselanhänger von Mac OS wird nur zum Speichern der Passphrase für Ihre lokalen SSH-Schlüssel verwendet. Es ist nicht dafür gedacht, Remote-Kennwörter über vorhandene SSH-Verbindungen zu senden. Rudedog vor 14 Jahren 1
Ich habe den öffentlichen Schlüssel in der Datei mit den berechtigten Schlüsseln auf dem Remote-Server. Ich habe folgende Anweisungen befolgt: http://articles.slicehost.com/2008/4/25/ubuntu-hardy-setup-page-1 Ich denke, ich muss mit `ssh-add` laufen bleiben. John Topley vor 14 Jahren 0
Verwenden Sie `ssh -v`, um zu diagnostizieren, was ssh tut. Verwenden Sie auch "sshd -p 8900 -v" auf der Serverseite und "ssh -v remote: 8900", um zu diagnostizieren, was sshd tut. Rudedog vor 14 Jahren 1
"Dies soll automatisch erfolgen, wenn Sie sich anmelden." - Dies ist bei Remote-Anmeldungen nicht der Fall (bei denen $ DISPLAY nicht festgelegt ist). Ether vor 9 Jahren 0
Wenn Sie * tmux * verwenden, besteht die Gefahr, dass veraltete Umgebungsvariablen (einschließlich `$ SSH_AUTH_SOCK` ') veraltet sind. Starten Sie den * tmux * -Server neu, wenn Sie Probleme haben. Radon Rosborough vor 7 Jahren 0
9
simonair

Hinweis: Für macOS Sierra wird auf die aktuellere Antwort von ChrisJF verwiesen .

Die [Antwort von Jeff McCarrell] [2] ist korrekt, mit der Ausnahme, dass der Befehl zum Hinzufügen der Passphrase anstelle eines Bindestrichs einen Bindestrich enthält, dh, –Kanstatt -Keine Nachricht mit der Wirkung von zu erzeugen –K: No such file or directory. Es sollte lesen:

ssh-add -K [path/to/private SSH key] 
Dies sollte ein Kommentar zu der Antwort sein, auf die Sie sich beziehen, und nicht eine neue Antwort. Wir reden hier über Sicherheit. Man könnte vorschlagen, dass Sie es sorgfältig abtippen sollten, anstatt 'ssh-add -K' blind zu kopieren und einzufügen Phil_1984_ vor 8 Jahren 2
Mit einem Bindestrich mit K erhalte ich eine "illegale Option - K". Kleinbuchstaben k wird als Option aufgeführt. Sam Dutton vor 7 Jahren 1
Danke für die Rückmeldung. Ich habe gerade bei macOS Sierra nachgesehen: "-K", dh Strichkapital-K, ist noch gültig simonair vor 7 Jahren 0
6
Olly

Ich vermute, Sie verwenden den Standardbefehl nicht ssh. Hast du sshüber Ports installiert? Versuchen Sie which sshzu sehen, welchen sshBefehl Sie verwenden.

Normalerweise sollte ein Dialogfeld angezeigt werden, in dem Sie nach Ihrem Kennwort gefragt werden, wenn es nicht bereits in Ihrem Schlüsselbund gespeichert ist.

Ich benutze keine Ports. John Topley vor 14 Jahren 0
Danke für die Info :) Ich hatte Probleme, weil ich OpenSSH von Homebrew verwendete. ggustafsson vor 12 Jahren 0
6
orkoden

Ich hatte ein ähnliches Problem, als ich versuchte, mich mit einem Client-SSC-Cert anzumelden. In diesem speziellen Fall handelte es sich um den Zugriff auf ein Git-Repository. Dies war die Situation:

  • Schlüssel wurde gespeichert ~/.ssh/
  • Der private Schlüssel hat eine Passphrase.
  • Die Passphrase wird im OS X-Login-Schlüsselbund gespeichert. ~/Library/Keychains/login.keychain
  • Die Verbindung war wie folgt: mein Mac- ->Remote-Mac- ->Git / SSH-Server
  • Mac OS X 10.8.5

Als ich mich über Remote Desktop mit einem Remote-Mac verband, hatte ich kein Problem. Beim Verbinden mit SSH mit dem Remote-Mac wurde ich jedoch jedes Mal nach der SSH-Passphrase gefragt. Die folgenden Schritte haben es für mich gelöst.

  1. security unlock-keychainDie Passphrase wird im Login-Schlüsselbund gespeichert. Dadurch wird es entsperrt und der ssh-agent kann darauf zugreifen.
  2. eval `ssh-agent -s`Startet den ssh-agent zur Verwendung in der Shell. Die Passphrase wird vom Schlüsselbund abgerufen und zum Entsperren des privaten SSH-Schlüssels verwendet.
  3. Stellen Sie die ssh / git-Verbindung her und erledigen Sie meine Arbeit.
  4. eval `ssh-agent -k` Töte den laufenden ssh-agent.
  5. security lock-keychain Verschließen Sie den Schlüsselbund wieder.
Damit # 2 für mich in einem Alias ​​verwendet werden konnte, musste ich eval \ $ (ssh-agent) für [Re: Remote Login and keychain] verwenden (https://discussions.apple.com/message/10541047) # 10541047). Wenn es sich nicht um einen Alias ​​handelt, funktioniert `eval $ (ssh-agent)` (_ohne Backslash $ _). Travis vor 9 Jahren 1
4
xaphod

Siehe auch:

security import priv_key.p12 -k ~/Library/Keychains/login.keychain security import pub_key.pem -k ~/Library/Keychains/login.keychain 

Wenn Sie diesen Hinweis hinzufügen, wenn mehr Details angefordert wurden, können Sie mit dem Befehl "security" Schlüssel (und andere Elemente) direkt in Keychains importieren. Das Schöne ist, dass Sie im Gegensatz zu ssh-add den Schlüsselbund angeben können. Dadurch ist es möglich, den Schlüsselbund direkt in das System zu importieren ("man security" um zu erfahren, wie)

Könnten Sie dieser Antwort bitte etwas mehr Details geben? Vielen Dank. Matthew Williams vor 10 Jahren 1
1
Ben

Die beste und von Apple beabsichtigte Lösung (seit macOS 10.12.2) wird hier beschrieben

Also mach einfach folgendes:

echo "UseKeychain yes" >> ~ / .ssh / config

Die Verwendung von ">>" ist gefährdet, wenn Sie den Befehl mehrmals eingeben. Besser machen Sie eine manuelle Ausgabe der Datei, wie in [Antwort von ChrisJF] (https://superuser.com/a/1163862/214362) beschrieben. Cœur vor 7 Jahren 0
Ja du genau dort Ben vor 7 Jahren 0