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


Ich verstehe, dass seit Mac OS X Leopard der Schlüsselbund das Speichern von SSH-Schlüsseln unterstützt. Könnte jemand bitte 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 auf diesen Schlüsseln eingestellt. Um mich bei diesen Servern anzumelden benutze ich folgende Befehle im Terminal:

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

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

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


133
2017-12-28 12:08


Ursprung




Antworten:


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

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

Der Schlüsselpunkt des Schlüsselbunds ist auch, die Passwörter auf Ihren ssh-Schlüsseln zu speichern, aber Sie sagen, dass Sie keine Passphrasen auf diesen Schlüsseln haben, also bin ich mir nicht sicher, was Sie von der Schlüsselbundintegration erwarten.

Wenn Sie sich zum ersten Mal anmelden, werden Sie wahrscheinlich keinen ssh-agent-Prozess sehen. Dieser Prozess wird automatisch von den Startdiensten gestartet, wenn das erste Mal versucht wird, diesen Socket zu lesen /tmp.


16
2017-12-28 17:37



Vielen Dank. Also muss ich noch rennen ssh-add meine RSA-Identitäten zu dem Standard-SSH-Agenten hinzufügen, der bei der Anmeldung gestartet wurde? - John Topley
Sie müssen ssh-add nicht ausführen; ssh-agent fragt beim ersten Start von ssh nach der Passphrase des Schlüssels. - Rudedog
Es fordert mich jedes Mal zur Eingabe des Passworts auf, wenn ich ssh starte. Der Punkt ist, dass ich keine Passwörter eingeben möchte. - John Topley
Was fordert Sie zur Passworteingabe auf? Ich beginne zu vermuten, dass es der entfernte Server ist, der Sie auffordert, was Ihre Aussage, dass Ihre Schlüssel keine Passphrases haben, in einer besseren Perspektive darstellt. Wenn Sie das Kennwort auf dem Remote-Server umgehen möchten, müssen Sie Ihren öffentlichen Schlüssel hinzufügen $HOME/.ssh/authorized_keys auf diesem Server. Mac OS 'ssh-agent + keychain wird nur zum Speichern der Passphrase für Ihre lokalen ssh-Schlüssel verwendet; Es ist nicht dazu gedacht, entfernte Passwörter über bestehende SSH-Verbindungen zu senden. - Rudedog
benutzen ssh -v zu diagnostizieren, was ssh macht. auch verwenden sshd -p 8900 -v auf der Serverseite und ssh -v remote:8900 zu diagnostizieren, was sshd macht. - Rudedog


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

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

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

(Beachten Sie, das ist ein Kapital K)

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

ssh-add -l

242
2018-04-11 19:58



Dies sollte die akzeptierte Antwort sein. - Kris
Die akzeptierte Antwort beantwortet die Frage dieses bestimmten Benutzers, aber diese beantwortet die Frage des generischen Benutzers - eqzx
Entwickler.apple.com/library/mac/documentation/Darwin/Reference/...  Sie benötigen auch die Option -K, um Passphrasen im Schlüsselbund zu speichern. - Neeme Praks
Wenn Sie eine andere Version von SSH über ein Paketsystem wie Homebrew installiert haben, ist es notwendig, einen absoluten Pfad wie /usr/bin/ssh-add. - Ludovic Kuty
Für Mac OS Sierra haben sich die Dinge geändert. Sehen github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain - schieferstapel


Ab macOS Sierra, SSH-Agent lädt nicht mehr automatisch geladene SSH-Schlüssel, wenn Sie sich bei Ihrem Konto anmelden. Dies ist absichtlich auf Apple-Seite, sie wollten sich wieder mit dem Mainstream verbinden OpenSSH Implementierung. [1]


Wie erklärt Hier, das ist die empfohlene Methode seit macOS 10.12.2:

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

    Host *
        UseKeychain yes
        AddKeysToAgent yes
    
  2. Jeder Schlüssel, den Sie dem hinzufügen SSH-Agent Verwendung der ssh-add /path/to/your/private/key/id_rsa Der Befehl wird automatisch zum Schlüsselbund hinzugefügt und sollte beim Neustart automatisch geladen werden.


Folgendes ist veraltet (als Referenz gespeichert).

Um zum vorherigen Verhalten zurückzukehren, möchten Sie den Befehl ausführen ssh-add -A Befehl (der automatisch alle SSH-Schlüssel lädt, die Passphrasen auf Ihrem Schlüsselbund haben), wenn Sie sich anmelden. Gehen Sie dazu folgendermaßen vor:

  1. Fügen Sie zuerst alle Schlüssel hinzu, die Sie automatisch laden möchten SSH-Agent Verwendung der ssh-add -K /absolute/path/to/your/private/key/id_rsa Befehl. Das -K Argument stellt sicher, dass die Schlüsselphrase hinzugefügt wird Der Schlüsselbund von macOS. Stellen Sie sicher, dass Sie den absoluten Pfad zu dem 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 namens com.yourusername.ssh-add.plist im ~/Library/LaunchAgents/ mit dem Inhalt unten. Plist-Dateien wie diese werden von verwendet launchd Skripts beim Anmelden ausführen. [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. Sagen launchd laden Plist-Datei Sie haben gerade erstellt, indem Sie ausgeführt haben: launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist.

Und du solltest alles vorbereitet sein.


70
2017-12-12 18:17



Verbunden: apple.stackexchange.com/questions/48502/ ... - slm


Es gibt einen einfacheren Weg als Ricardos Antwort um dein Passwort zwischen den Sessions / Neustarts deines Mac mit 10.12 Sierra zu erhalten.

  1. ssh-add -K ~/.ssh/id_rsa
    Hinweis: Ändern Sie den Pfad zu Ihrem id_rsa-Schlüssel.
  2. ssh-add -A 
  3. Erstellen Sie (oder bearbeiten Sie, falls vorhanden) Folgendes ~/.ssh/config Datei:

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

    Jetzt wird das Passwort zwischen Neustarts gespeichert!

Apple hat absichtlich das Verhalten für ssh-agent in macOS 10.12 Sierra geändert, um die vorherigen SSH-Schlüssel nicht mehr automatisch zu laden, wie in diesem Artikel erwähnt OpenRadar, Twitter-Diskussion, und Technische Anmerkung von Apple. Die obige Lösung wird das alte Verhalten von El Capitan nachahmen und sich an Ihr Passwort erinnern.


29
2018-01-05 18:53



Super, funktioniert wie ein Charme, imho viel sauberer als die anderen und am richtigen Ort gelöst :) - GerardJP


Hinweis: Für Mac OS Sierra, beziehen Sie sich bitte auf die neuesten 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 Anstatt von -K, verursacht eine Nachricht mit der Wirkung von –K: No such file or directory. Es sollte lesen:

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

9
2018-04-28 13:28



Dies sollte ein Kommentar zu der Antwort sein, auf die Sie sich beziehen, anstatt eine neue Antwort zu geben. Wir reden hier über Sicherheit. Man könnte vorschlagen, dass Sie es sorgfältig tippen, anstatt blind zu kopieren und einzufügen ssh-add -K - Phil_1984_
Einen Bindestrich mit K verwendend, komme ich illegal option -- K. Kleinbuchstabe k ist als eine Option aufgeführt. - Sam Dutton
Danke für die Rückmeldung. Ich habe gerade auf macOS Sierra gecheckt: -K, d.h. Strich-Kapital-K, ist immer noch gültig - simonair


Ich vermute, dass Sie den Standard nicht verwenden ssh Befehl. Hast du ssh über Ports installiert? Versuchen which ssh um zu sehen, was ssh Befehl, den Sie verwenden.

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


6
2017-12-28 12:55



Ich verwende keine Ports. - John Topley
Danke für die Info :) Ich hatte Probleme, weil ich OpenSSH von Homebrew benutzt habe. - ggustafsson


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

  • Schlüssel wurde gespeichert in ~/.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 mit remote mac über Remote Desktop verbunden war, hatte ich kein Problem. Bei der Verbindung mit SSH zum Remote-Mac wurde ich 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 Login-Schlü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. Es wird die Passphrase aus dem Schlüsselbund erhalten und es verwenden, um den privaten SSH-Schlüssel zu entsperren.
  3. Stellen Sie die ssh / git Verbindung her und machen Sie meine Arbeit.
  4. eval `ssh-agent -k` Töte den laufenden ssh-agent.
  5. security lock-keychain Verriegeln Sie den Schlüsselbund erneut.

6
2017-10-14 12:29



Damit # 2 für mich innerhalb eines Alias ​​funktioniert, musste ich verwenden eval \$(ssh-agent) pro Re: Remote Login und Schlüsselbund. Wenn nicht innerhalb eines Alias eval $(ssh-agent) arbeitet (ohne den Backslash $). - Travis


Siehe auch:

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

... diese Notiz hinzufügen, wenn mehr Details angefordert wurden: Der "security" -Befehl kann Schlüssel (und andere Dinge) direkt in Schlüsselanhänger importieren. Das Schöne daran ist, dass Sie im Gegensatz zu ssh-add den Schlüsselbund angeben können. Dies ermöglicht es, direkt in das System Keychain zu importieren ("man security", um zu lernen, wie)


4
2018-03-26 09:45



Können Sie bitte etwas detaillierter auf diese Antwort eingehen? Vielen Dank. - Matthew Williams