webentwicklung-frage-antwort-db.com.de

Wie verwende ich 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 bitte jemand erklären, wie diese Funktion funktionieren soll.

Ich habe einige von mir generierte RSA-Schlüssel in meinem ~/.ssh-Verzeichnis gespeichert, um auf verschiedene Server zugreifen zu können. Ich habe keine Passphrasen für diese Schlüssel. Zur Zeit verwende ich die folgenden Befehle im Terminal, um mich bei diesen Servern anzumelden:

 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?

137
John Topley

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

Ihre Bash-Skripte starten Ihren eigenen ssh-Agenten (ssh-agent, nicht ssh_agent) und überschreiben den vorhandenen ssh-agent, der bei der Anmeldung für Sie eingerichtet wurde.

Der Sinn des Schlüsselbunds besteht auch darin, die Passwörter in Ihren SSH-Schlüsseln zu speichern. Sie sagen jedoch, dass Sie für diese Schlüssel keine Passphrasen festgelegt haben, sodass ich nicht sicher bin, was Sie von der Schlüsselbund-Integration erwarten.

Wenn Sie sich zum ersten Mal anmelden, wird wahrscheinlich kein ssh-agent-Prozess angezeigt. Dieser Vorgang wird automatisch von den Startdiensten gestartet, wenn zum ersten Mal versucht wird, diesen Socket in /tmp zu lesen.

16
Rudedog

Ab der Leopard-Version von OS X ist ssh-agent enger in Keychain integriert. Es ist möglich, die Passphrasen aller Ihrer SSH-Schlüssel sicher im Schlüsselbund zu speichern, von dem ssh-agent sie beim Start liest. Das Fazit ist, dass es einfach ist, Ihre Schlüssel mit Passwörtern zu sichern, aber niemals die Passphrase eingeben müssen, 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 einfache private Schlüssel, überspringt Zertifikate)

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

(Beachten Sie, dass das eine Hauptstadt K ist)

Jedes Mal, wenn 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 Keychain Access-App sowie von der Befehlszeile aus zu sehen:

ssh-add -l
252
jeffmcc

Ab macOS Sierra , ssh-agent werden zuvor geladene ssh-Schlüssel nicht mehr automatisch geladen, wenn Sie sich bei Ihrem Konto anmelden. Dies ist seitens Apple beabsichtigt, sie wollten sich mit der Mainstream OpenSSH -Implementierung neu ausrichten. [1]


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

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

    Host *
        UseKeychain yes
        AddKeysToAgent yes
    
  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 zum Schlüsselbund hinzugefügt und sollte beim Neustart automatisch geladen werden.


Folgendes ist veraltet (wird als Referenz aufbewahrt).

Um zum vorherigen Verhalten zurückzukehren, möchten Sie den Befehl ssh-add -A ausführen (der alle SSH-Schlüssel mit Passphrasen auf 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 automatisch laden möchten, mit dem Befehl ssh-add -K /absolute/path/to/your/private/key/id_rsa zum Befehl ssh-agent hinzu. Das Argument -K stellt sicher, dass die Passphrase zum macOS-Schlüsselbund 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 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 zum Ausführen von Skripten 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. Weisen Sie launchd an, die soeben erstellte Datei plist zu laden, indem Sie Folgendes ausführen: launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist.

Und Sie sollten bereit sein.

76

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

  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 Sie die folgende ~/.ssh/config-Datei (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 von ssh-agent in macOS 10.12 Sierra absichtlich dahingehend geändert, dass die vorherigen SSH-Schlüssel nicht mehr automatisch geladen werden, wie in dieser OpenRadar , Twitter-Diskussion und Technischer Hinweis von Apple angegeben. Die obige Lösung ahmt das alte Verhalten von El Capitan nach und speichert Ihr Passwort.

32
ChrisJF

Hinweis: Informationen zu macOS Sierra finden Sie in der neueren Antwort von ChrisJF .

Die [Antwort von Jeff McCarrell] [2] ist korrekt, mit der Ausnahme, dass der Befehl zum Hinzufügen der Passphrase einen Bindestrich anstelle eines Bindestrichs enthält, d. H. –K anstelle von -K, wodurch eine Nachricht mit der Wirkung von –K: No such file or directory ausgelöst wird. Es sollte lauten:

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

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

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

6
Olly

Ich hatte ein ähnliches Problem beim Versuch, mich mit einem Client-SSH-Zertifikat anzumelden. In diesem speziellen Fall war es für den Zugriff auf ein Git-Repository. Das war die Situation:

  • Schlüssel wurde in ~/.ssh/ gespeichert
  • Der private Schlüssel hat eine Passphrase.
  • Die Passphrase wird 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 über einen Remote-Desktop eine Verbindung zum Remote-Mac herstellte, hatte ich kein Problem. Beim Herstellen einer Verbindung mit SSH zum 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-keychain Die Passphrase wird im Anmeldeschlüsselbund gespeichert. Dadurch wird die Sperre aufgehoben und ssh-agent kann darauf zugreifen.
  2. eval `ssh-agent -s` Startet ssh-agent für die Shell-Verwendung. 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` Beende den laufenden ssh-Agenten.
  5. security lock-keychain Schließen Sie den Schlüsselbund erneut.
6
orkoden

Siehe auch:

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

... Hinzufügen dieser Notiz, da weitere Details angefordert wurden: Mit dem Befehl "security" können Schlüssel (und andere Dinge) direkt in Keychains importiert werden. Das Schöne ist, dass Sie im Gegensatz zu ssh-add den Schlüsselbund angeben können. Dadurch ist es möglich, direkt in das System Keychain zu importieren ("man security" um zu lernen wie)

4
xaphod

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

1
Ben