2009-12-28 12:08:48 +0000 2009-12-28 12:08:48 +0000
143
143

Wie verwendet man Mac OS X Keychain mit SSH-Schlüsseln?

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

Ich habe einige RSA-Schlüssel, die ich erzeugt habe, in meinem ~/.ssh-Verzeichnis für den Zugriff auf verschiedene Server gespeichert. Ich habe keine Passphrasen für diese Schlüssel festgelegt. Um mich bei diesen Servern anzumelden, verwende ich derzeit die folgenden Befehle im Terminal:

eval `ssh-agent` ssh-add ~/.ssh/some\_key\_rsa ssh user@server

(Ich habe einige Bash-Funktionen geschrieben, um dies zu vereinfachen.)

Gibt es eine bessere Möglichkeit, dies mit dem Schlüsselbund zu tun?

Antworten (9)

255
255
255
2011-04-11 19:58:42 +0000

Ab der Leopard-Version von OS X ist ssh-agent enger mit Keychain integriert. Es ist möglich, die Passphrasen aller Ihrer SSH-Schlüssel sicher im Schlüsselbund zu speichern, aus dem ssh-agent sie beim Start ausliest. Unterm Strich ist es also einfach, Ihre Schlüssel mit Passphrasen zu sichern, aber nie die Passphrase eingeben zu müssen, um sie zu benutzen! So geht’s:

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

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

(beachten Sie, dass das ein großes K ist)

Wann immer Sie Ihren Mac neu starten, werden alle SSH-Schlüssel in Ihrem Schlüsselbund automatisch geladen. Sie sollten in der Lage sein, die Schlüssel in der App Keychain Access zu sehen, sowie über die Kommandozeile über:

ssh-add -l
82
82
82
2016-12-12 18:17:44 +0000

Ab macOS Sierra lädt ssh-agent nicht mehr automatisch zuvor geladene ssh-Schlüssel, wenn Sie sich an Ihrem Konto anmelden. Dies ist von Apple beabsichtigt, sie wollten sich wieder an die Mainstream-Implementierung von OpenSSH anpassen. [1]


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

  1. Fügen Sie die folgenden Zeilen zu Ihrer ~/.ssh/config-Datei hinzu:

  2. Jeder Schlüssel, den Sie dem ssh-agent mit dem Befehl ssh-add /path/to/your/private/key/id_rsa hinzufügen, wird automatisch dem Schlüsselbund hinzugefügt und sollte beim Neustart automatisch geladen werden.


Das Folgende ist veraltet (wird als Referenz beibehalten).

Um zum vorherigen Verhalten zurückzukehren, sollten Sie den Befehl ssh-add -A (der automatisch alle ssh-Schlüssel mit Passphrasen in Ihrem Schlüsselbund lädt) ausführen, wenn Sie sich anmelden. Führen Sie dazu die folgenden Schritte aus:

  1. Fügen Sie zunächst alle Schlüssel, die Sie automatisch laden möchten, mit dem Befehl ssh-add -K /absolute/path/to/your/private/key/id_rsa zum ssh-agent hinzu. Das Argument -K sorgt dafür, dass die Schlüssel-Passphrase zum macOS-Schlüsselbund hinzugefügt wird. Stellen Sie sicher, dass Sie den absoluten Pfad zu dem Schlüssel verwenden. Die Verwendung eines relativen Pfades führt dazu, dass das automatisch gestartete Skript Ihren Schlüssel nicht findet.

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

  3. Erstellen Sie eine Datei mit dem Namen com.yourusername.ssh-add.plist in ~/Library/LaunchAgents/ mit dem folgenden Inhalt. Plist-Dateien wie diese werden von launchd verwendet, um Skripte auszuführen, wenn Sie sich anmelden. [2] [3]

  4. Weisen Sie launchd an, die soeben erstellte Listendatei zu laden, indem Sie ausführen: launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist.

Und schon sollten Sie fertig sein.

34
34
34
2017-01-05 18:53:54 +0000

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

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

Apple hat das Verhalten von 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-Diskussion und Technischer Hinweis von Apple beschrieben. Die obige Lösung imitiert das alte Verhalten von El Capitan und merkt sich Ihr Passwort.

17
17
17
2009-12-28 17:37:32 +0000

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

Ihre Bash-Skripte starten Ihren eigenen ssh-Agenten (buchstabiert ssh-agent, nicht ssh_agent) und überschreiben das vorhandene ssh-agent, das bei der Anmeldung für Sie eingerichtet wird.

Außerdem ist der Sinn des Schlüsselbundes, die Passwörter zu Ihren ssh-Schlüsseln zu speichern, aber Sie sagen, dass Sie keine Passphrasen für diese Schlüssel gesetzt haben, also bin ich mir nicht sicher, was Sie von der Integration des Schlüsselbundes erwarten.

Schließlich, wenn Sie sich zum ersten Mal anmelden, werden Sie wahrscheinlich keinen ssh-agent-Prozess sehen. Dieser Prozess wird automatisch von den Startdiensten gestartet, wenn zum ersten Mal etwas versucht, den Socket in /tmp zu lesen.

10
10
10
2011-04-28 13:28:40 +0000

Hinweis: Für macOS Sierra beachten Sie bitte die aktuellere Antwort von ChrisJF .

Die [Antwort von Jeff McCarrell][2] ist korrekt, außer dass der Befehl zum Hinzufügen der Passphrase einen Bindestrich anstelle eines Bindestrichs enthält, d. h. –K anstelle von -K, was eine Meldung im Sinne von –K: No such file or directory verursacht. Sie sollte lauten:

ssh-add -K [path/to/private SSH key]
6
6
6
2013-10-14 12:29:41 +0000

Ich hatte ein ähnliches Problem, als ich versuchte, mich mit einem Client-SH-Zertifikat anzumelden. In diesem speziellen Fall war es für den Zugriff auf ein Git-Repository. Dies war die Situation:

  • Der Schlüssel wurde gespeichert in ~/.ssh/
  • Der private Schlüssel hat eine Passphrase.
  • Die Passphrase ist im OS X-Anmeldeschlüsselbund gespeichert. ~/Library/Keychains/login.keychain
  • Die Verbindung war wie folgt: mein Mac -> entfernter Mac -> git/ssh server
  • Mac OS X 10.8.5

Als ich mich mit dem entfernten Mac über den Remotedesktop verbunden habe, gab es keine Probleme. Wenn ich mich jedoch mit SSH mit dem entfernten Mac verband, wurde ich jedes Mal nach der ssh-Passphrase gefragt. Die folgenden Schritte lösten das Problem für mich.

  1. security unlock-keychain Die Passphrase wird im Login-Schlüsselbund gespeichert. Dadurch wird sie entsperrt und ssh-agent kann darauf zugreifen.
  2. evalssh-agent -s`` Startet ssh-agent für die Verwendung der Shell. Er holt sich die Passphrase aus dem Schlüsselbund und verwendet sie, um den privaten ssh-Schlüssel zu entsperren.
  3. Stellt die ssh/git-Verbindung her und macht meine Arbeit.
  4. evalssh-agent -k`` Den laufenden ssh-agent beenden.
  5. security lock-keychain Sperren Sie den Schlüsselbund wieder.
6
6
6
2009-12-28 12:55:13 +0000

Ich vermute, dass Sie nicht den Standardbefehl ssh verwenden. Haben Sie ssh über Ports installiert? Versuchen Sie which ssh, um zu sehen, welchen ssh-Befehl Sie verwenden.

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

4
4
4
2014-03-26 09:45:49 +0000

Siehe auch:

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

… ich füge diesen Hinweis hinzu, da mehr Details gewünscht wurden: der Befehl “security” ist in der Lage, Schlüssel (und andere Dinge) direkt in den Schlüsselbund zu importieren. Das Schöne daran ist, dass Sie im Gegensatz zu ssh-add den Schlüsselbund angeben können. Damit ist es möglich, direkt in den System-Schlüsselbund zu importieren (“man security”, um zu erfahren, wie)

1
1
1
2017-01-26 10:39:16 +0000

Die beste und von Apple vorgesehene Lösung (seit macOS 10.12.2) ist hier

Gehen Sie also einfach wie folgt vor:

echo “UseKeychain yes” >> ~/.ssh/config