Wie verwende ich den privaten SSH-Schlüssel zum Anmelden, ohne bei jedem Mal eine Passphrase eingeben zu müssen?

Wie verwende ich den privaten SSH-Schlüssel zum Anmelden, ohne bei jedem Mal eine Passphrase eingeben zu müssen?

Ich verwende Mac OS X Lion und melde mich täglich bei Remote-Hosts über SSH an. Obwohl ich zur Remote-Authentifizierung ein SSH-Schlüsselpaar verwende und nicht die Anmeldephrase jedes Hosts motorisieren muss, ist es dennoch sehr ärgerlich, dass das Terminal nach der Passphrase für den Zugriff auf meinen privaten SSH-Schlüssel fragt.

Aus Sicherheitsgründen ist meiner Meinung nach eine Passphrase für den Zugriff auf den privaten SSH-Schlüssel unbedingt erforderlich. Gibt es eine Möglichkeit, das Terminal dazu zu bringen, die Phrase beim Start genau nur einmal abzufragen, sie sich dann zu merken und meinen privaten Schlüssel in späteren SSH-Sitzungen automatisch zu verwenden?

Es gibt ein Skript namens keychain, das unter Gentoo Linux einwandfrei funktioniert. Aber ich habe es unter Mac OS X Lion nie herausgefunden. Außerdem gibt es so viele einschüchternde Begriffe wie ssh-agent, ssh-add. Nachdem ich verschiedene Materialien über diese SSH-Toolkits gelesen und einige frustrierende Experimente durchgeführt hatte, war ich noch verwirrter.

Aus diesem Grund bin ich zu StackExchange gekommen, um Rat zu den folgenden Fragen zu suchen.

  1. Was sind ssh-agent, ssh-add, keychain, Keychain Access.appund wie interagieren sie miteinander?
  2. Wie kann ich die Passphrase für meinen privaten SSH-Schlüssel einmal beim Anmelden eingeben und sie beim späteren Erstellen einer SSH-Sitzung frei verwenden?
  3. Ähm... Was ist falsch an Keychain Access.app? Es speichert die SSH-Phrase nicht mehr wie vorher.

Ich liste hier auf, was ich getan habe. Hoffentlich gibt es Hinweise zu den Schritten, die ich vergessen habe.

Schritt 1. Erstellen Sie ein SSH-Schlüsselpaar auf meinem Mac.

$ ssh-keygen -t rsa -C "[email protected]"
# Set a passphrase for accessing the private key.

Schritt 2. Kopieren Sie meinen öffentlichen SSH-Schlüssel auf den Remote-Host. Als Beispiel kopiere ich den Schlüssel auf den lokalen Host, Mac.

$ ssh-copy-id USER@localhost
# Enter the login password for USER at localhost, not my SSH passphrase

Schritt 3. Versuchen Sie dann, über die SSH-Schlüsselpaar-Authentifizierung eine Verbindung zum Remote-Host (hier: localhost) herzustellen.

$ ssh USER@locahost
Enter passphrase for key '/Users/YOUR_ACCOUNT/.ssh/id_rsa': 
# Enter my SSH passphrase, not the login password.

Schritt 4. Melden Sie sich vom Remote-Host ab und versuchen Sie erneut, eine Verbindung herzustellen. Verdammt, das Terminal fragt erneut nach der SSH-Phrase.

Eine häufig gestellte Frage lautet: „Funktioniert SSH-Agent auf Ihrem Mac einwandfrei?“ Ehrlich gesagt habe ich keine Ahnung, was hier los ist. Hier sind einige Ergebnisse.

$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(EMPTY)
$ ssh-add -l
Could not open a connection to your authentication agent.
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-Z54zXukQiP/agent.26769; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26770; export SSH_AGENT_PID;
echo Agent pid 26770;
$ ssh-add -l
Could not open a connection to your authentication agent.
$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(STILL EMPTY)
$ ssh-agent  # Oh no, anther ssh-agent with different PID
SSH_AUTH_SOCK=/tmp/ssh-cx0B4FUX8B/agent.26898; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26899; export SSH_AGENT_PID;
echo Agent pid 26899;
$ ps -e | grep -i ssh
26769 ??         0:00.03 ssh-agent
26899 ??         0:00.02 ssh-agent

Wir freuen uns über jedes Feedback. Danke!

Antwort1

ssh-agentist das Teil, das Sie zum Laufen bringen möchten, da es genau das tut, wonach Sie fragen. Der Agent läuft als Daemon, und wenn Sie ihm einen privaten Schlüssel „hinzufügen“, merkt er sich diesen Schlüssel und stellt ihn der Remote-Instanz sshdbei der ersten Verbindung automatisch zur Verfügung. ( ssh-addist einfach der Befehl, den Sie ausführen, um manuell einen privaten Schlüssel hinzuzufügen ssh-agent).

In OS X ab Leopard sollten Sie es nie mehr ssh-agentmanuell ausführen müssen ssh-add. Es sollte „einfach passieren“, wenn Sie versuchen, eine Verbindung zu einem Server herzustellen. Einmal pro Schlüssel wird Ihnen ein UI-Passwortdialog angezeigt, der (unter anderem) es Ihnen ermöglicht, den Schlüssel automatisch hinzuzufügen, ssh-agentsodass Sie nie wieder dazu aufgefordert werden.

Dies wird durch eine Konfiguration erreicht launchd, die auf Verbindungen am $SSH_AUTH_SOCKSocket wartet und automatisch gestartet wird, ssh-agentwenn dies zum ersten Mal nötig ist. Danach ssh-agentwerden Sie nur dann zur Eingabe von Anmeldeinformationen aufgefordert, wenn ein neuer Schlüssel geöffnet werden muss.

Wenn das nicht funktioniert, stellen Sie sicher, dass die richtige launchdKonfigurationsdatei vorhanden ist:

/System/Library/LaunchAgents/org.openbsd.ssh-agent.plist

Wenn es aus irgendeinem Grund immer noch nicht funktioniert, können Sie die Dinge auf die „alte“ Art und Weise manuell zum Laufen bringen:

http://timesinker.blogspot.com/2007/08/getting-ssh-agent-going-on-mac-osx.html

Es gibt auch diese Anwendung, die ich seit dem Erscheinen von Leopard nicht mehr verwende, die aber in früheren Versionen von Mac OS X im Grunde dasselbe getan hat:

http://www.sshkeychain.org/

Antwort2

Während ich das "Problem" lösen wollte, habe ich einige verwandte Themen gegoogelt und mir Notizen darüber gemacht, wie ssh-agent, ssh-add, keychain, KeyChain Access.appfunktionieren. Es stellte sich schließlich heraus, dass dieses Problem überhaupt kein Problem ist, sondern dass es nur um mich geht, und so genannteSSH-Anmeldung ohne jedes Mal nach der Passphrase zu fragenfunktioniert auf dem Mac sofort einwandfrei.

Ich habe durch diesen Prozess jedoch einige Erfahrungen gesammelt. Ich schreibe meine Notizen hier auf, in der Hoffnung, dass sie jemandem helfen, der diese Begriffe verwirrt.

Zwei Kennwortbegriffe:

  • passphrasebezieht sich auf die erforderliche Phrase beim Zugriff auf Ihren privaten SSH-Schlüssel.
  • passwordbezieht sich auf die erforderliche Phrase zum Anmelden bei Ihrem Mac.

Jetzt kann ich herausfinden, was diese Toolkits machen, nämlich , , , ssh-agentauf ssh-adddem Mac.keychainKeychain Access.app

  • ssh-agentist der kritische Dienst, der die Verwendung des privaten SSH-Schlüssels ohne Eingabe der SSH-Passphrase ermöglicht. ssh-agentfunktioniert auf diese Weise. Zuerst speichert es oderZwischenspeicher, Ihren privaten SSH-Schlüssel im Hauptspeicher. Wenn Ihr privater SSH-Schlüssel dann zu einem späteren Zeitpunkt in dieser Sitzung für die Remote-Authentifizierung benötigt wird, ssh-agentwird Ihr privater Schlüssel im Hauptspeicher gefunden und an den Remote-Prozess übergeben. Sie werden nur dann aufgefordert, Ihre SSH-Passphrase einzugeben, wenn Ihr privater Schlüssel ssh-agentanfänglich hinzugefügt wird.
  • ssh-addist Teil einer ssh-agentSammlung, die Ihnen hilft, Ihre SSH-Schlüssel zu verwalten ssh-agent. Wir verwenden ssh-addBefehle, um private Schlüssel im Schlüsselbund des SSH-Agenten aufzulisten, hinzuzufügen und zu entfernen. Anschließend ssh-addkommuniziert er mit ssh-agentdem Dienst, um die Aufgaben auszuführen.
  • keychainist ein Skript zum Suchen ssh-agenteines Dienstes (falls dieser nicht vorhanden ist, starten Sie einen neuen) und zum Aufrufen ssh-adddes Hinzufügens von privaten SSH-Schlüsseln. keychainHat eine einfache und unkomplizierte Idee und funktioniert gut unter Linux, wo der SSH-Agent normalerweise nicht automatisch gestartet wird.
  • Keychain Access.appscheint die komplizierteste Komponente zu sein. Es handelt sich um den universellen Token-Speicherdienst von Mac OS X. Er speichert verschiedene Token, wie Passwörter, Zertifikate usw. und dient als TokenAgentfür die Apps, die die Token anfordern. In unserem Fall mit dem privaten SSH-Schlüssel erfasst es zuerst die Anforderung zum Zugriff auf den privaten SSH-Schlüssel und öffnet ein Fenster, in dem Sie aufgefordert werden, die SSH-Passphrase, die eine Art Token ist, im Keychain Access.appSchlüsselbund von zu speichern. Wenn Sie dann das nächste Mal private Schlüssel zur Authentifizierung verwenden, Keychain Access.appöffnet sich erneut ein Fenster mit der Frage, ob das Privileg gewährt werden soll. Nach einer klaren Ja-Antwort keychain Access.appfügt es Ihren privaten Schlüssel zum ssh-agentSpeicher von hinzu.

Zwei Dinge verdienen Ihre Aufmerksamkeit:

  1. ssh-agentMac OS X Lion startet beim Systemstart automatisch einen Dienst, der auf einem Socket unter lauscht /tmp.
  2. Keychain Access.appspeichert Ihre SSH-Passphrase, sodass Ihr privater Schlüssel hinzugefügt werden kann, ssh-agentohne dass Sie dabei unterbrochen werden. Ja, Sie müssen Ihre SSH-Phrase nicht eingeben, aber Sie müssen das Anmeldekennwort Ihres Mac-Kontos eingeben, um Berechtigungen zu erteilen, wenn Sie diesen Eintrag zum ersten Mal erstellen.

Zusammenfassend also:Die SSH-Anmeldung ohne Abfrage der Passphrase sollte unter Mac OS X sofort funktionieren.

Antwort3

Falls andere Lösungen hier für manche nicht funktionieren, hat bei mir Folgendes funktioniert.

Stellen Sie für jeden privaten Schlüssel in Ihrem ~/.ssh-Verzeichnis sicher, dass auch der entsprechende öffentliche Schlüssel vorhanden ist. Stellen Sie sicher, dass der öffentliche Schlüssel genau den gleichen Namen hat wie der private Schlüssel, jedoch mit .pubam Ende. Wenn Sie bereits einen geeigneten öffentlichen Schlüssel hatten, versuchen Sie, ihn neu zu generieren.

Wenn Sie die öffentlichen Schlüssel neu erstellen müssen, können Sie dies ganz einfach tun: -

ssh-keygen -y -f ~/.ssh/my_key > ~/.ssh/my_key.pub

Ersetzen Sie my_keyes durch den Namen Ihres Schlüssels.

Danach merkt sich MacOS die Schlüsselpassphrase wie vorgesehen im Schlüsselbund.

Hinweis: Das Eingeben der Passphrase und das Speichern im Schlüsselbund ist jetzt eine einmalige Aktion (nicht einmal pro Anmeldesitzung, wie vom OP gewünscht), aber vorausgesetzt, die Anmeldung am betreffenden Mac ist passwortgeschützt, dann ist Ihre Passphrase durch dieses Anmeldepasswort geschützt. Außerdem ergibt diese Lösung für mich keinen Sinn ... zusätzlich zum privaten Schlüssel sollte kein öffentlicher Schlüssel erforderlich sein, aber aus irgendeinem Grund erfordert MacOSX ihn.

(ursprünglich ausAntwortzu einer ähnlichen Frage auf Apple Stack Exchange)

Antwort4

ssh-copy-idSie hätten auch versuchen können , durch etwas wie zu ersetzen .k="$(cat ~/.ssh/id_rsa.pub)"; ssh [email protected] "umask 0077; mkdir -p ~/.ssh; echo "$k" >> ~/.ssh/authorized_keys2"

verwandte Informationen