Wie kann ich mich unter Mac OS X Lion mit dem privaten SSH-Schlüssel anmelden, ohne jedes Mal eine Passphrase einzugeben?


23

Ich verwende Mac OS X Lion und logge mich jeden Tag über SSH bei Remote-Hosts ein. Obwohl ich das SSH-Schlüsselpaar für die Remote-Authentifizierung verwende und nicht die Anmeldungsphrase jedes Hosts motorisieren muss, ist es immer noch sehr ärgerlich, dass das Terminal nach der Passphrase für den Zugriff auf meinen privaten SSH-Schlüssel fragt.

Aus Sicherheitsgründen wird meiner Meinung nach eine Passphrase für den Zugriff auf den privaten SSH-Schlüssel benötigt. Gibt es eine Möglichkeit, die das Terminal veranlasst, den Ausdruck nur einmal beim Start abzufragen, ihn dann auswendig zu lernen und meinen privaten Schlüssel in späteren SSH-Sitzungen automatisch zu verwenden?

Es gibt ein Skript namens, keychaindas unter Gentoo Linux einwandfrei funktioniert. Aber ich habe es unter Mac OS X Lion nie herausgefunden. Was mehr ist , gibt es so viele einschüchternd Begriffe wie ssh-agent, ssh-add. Nachdem ich verschiedene Materialien über diese SSH-Toolkits gelesen und einige frustrierte Experimente durchgeführt hatte, wurde ich verwirrter.

Daher bin ich zu StackExchange gekommen und habe nach Ratschlägen zu den folgenden Fragen gesucht.

  1. Was ist ssh-agent, ssh-add, keychain, Keychain Access.appund wie sie miteinander interagieren?
  2. Wie kann ich die Passphrase für meinen privaten SSH-Schlüssel bei der Anmeldung einmal eingeben und bei der späteren Erstellung einer SSH-Sitzung frei verwenden?
  3. Errr ... Was ist los mit Keychain Access.app? Der SSH-Ausdruck wird nicht wie zuvor gespeichert.

Ich liste auf, was ich hier gemacht habe. Hoffentlich gibt es Hinweise auf die Schritte, die ich verpasst habe.

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

$ ssh-keygen -t rsa -C "me@email.com"
# Set a passphrase for accessing the private key.

Schritt 2. Kopieren Sie meinen öffentlichen SSH-Schlüssel auf den Remote-Host. Zum Beispiel kopiere ich den Schlüssel auf localhost, 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üsselpaarauthentifizierung 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 gut auf Ihrem Mac?". Ehrlich gesagt habe ich keine Ahnung, was mit diesen Dingen los ist. Hier einige laufende 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

Rückmeldungen sind willkommen. Vielen Dank!


Verwandte . Möglicherweise können Sie die akzeptierte Antwort an Ihren Anwendungsfall anpassen.
Daniel Beck

Antworten:


12

ssh-agentist das Stück, das Sie arbeiten möchten, da es genau das tut, wonach Sie fragen. Der Agent wird als Daemon ausgeführt. Wenn Sie ihm einen privaten Schlüssel "hinzufügen", merkt er sich diesen Schlüssel und stellt ihn der Fernbedienung sshdbei der ersten Verbindung automatisch zur Verfügung . ( ssh-addist einfach der Befehl, dem Sie manuell einen privaten Schlüssel hinzufügen ssh-agent).

In OS X sollten Sie ab Leopard nie mehr ausführen ssh-agentoder ssh-addmanuell ausführen müssen. Es sollte "nur passieren", wenn Sie versuchen, eine Verbindung zu einem Server herzustellen. Einmal pro Schlüssel werden Sie mit einem UI-Passwort-Dialogfeld aufgefordert, in dem Sie (unter anderem) den Schlüssel automatisch dem hinzufügen können, ssh-agentsodass Sie nie wieder dazu aufgefordert werden.

Dies wird durch eine launchdKonfiguration erledigt, die auf Verbindungen auf dem $SSH_AUTH_SOCKSocket wartet und automatisch gestartet wird, ssh-agentwenn dies zum ersten Mal erforderlich ist. danach, ssh-agentnur aufgefordert, Anmeldeinformationen , wenn es einen neuen Schlüssel öffnen muss.

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

/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 von Hand 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 das Gleiche getan habe:

http://www.sshkeychain.org/


4
Danke, Michael Edenfield. Ich habe herausgefunden, was falsch läuft, und jetzt funktioniert ssh-login-without-passphrase unter Mac OS X Lion perfekt. Ich habe einige dumme Dinge getan - ich habe einen symbolischen Link erstellt ~/tmp, der auf /tmp/einen Cron-Job zeigt, der ~/tmpalle 2 Stunden bereinigt wird, wodurch auch der Ssh-Agent-Socket entfernt wurde. Oh man, ich hasse mich.
Jianwen W.

13

Während des Prozesses das „Problem“ zu lösen, habe ich einige verwandten Themen gegoogelt und notieren Sie ein paar Notizen darüber , wie ssh-agent, ssh-add, keychain, KeyChain Access.appArbeit. Es stellt sich schließlich heraus, dass dieses Problem überhaupt kein Problem ist, stattdessen dreht sich alles um mich, und das so genannte ssh-Login-ohne-fragen-der-Passphrase- funktioniert auf dem Mac jedes Mal einwandfrei.

Dieser Prozess bringt mir jedoch einige Erfahrungen ein. Ich schreibe meine Notizen hier auf, in der Hoffnung, dass sie jemandem helfen, der mit diesen Begriffen verwirrt ist.

Zwei Passwortbegriffe:

  • passphrase verweist auf den erforderlichen Ausdruck beim Zugriff auf Ihren privaten SSH-Schlüssel.
  • password bezieht sich auf den erforderlichen Ausdruck, um sich bei Ihrem Mac anzumelden.

Jetzt kann ich herausfinden , was diese Toolkits tun, das heißt, ssh-agent, ssh-add, keychain, Keychain Access.appauf dem Mac.

  • ssh-agentist der entscheidende Dienst, um die Verwendung des privaten SSH-Schlüssels ohne Eingabe der SSH-Passphrase zu aktivieren. ssh-agentfunktioniert auf diese Weise. Zunächst wird Ihr privater SSH-Schlüssel im Hauptspeicher gespeichert oder zwischengespeichert . Wenn zu einem späteren Zeitpunkt in dieser Sitzung Ihr privater SSH-SSH-Schlüssel für die Remote-Authentifizierung benötigt ssh-agentwird , wird Ihr privater Schlüssel im Hauptspeicher gefunden und an den Remote-Prozess übergeben. Die einzige Möglichkeit, dass Sie aufgefordert werden, Ihre SSH-Passphrase einzugeben, besteht darin, dass Ihr privater Schlüssel von ssh-agentzunächst hinzugefügt wird .
  • ssh-addist Teil der ssh-agentSammlung, die das Verwalten Ihrer SSH-Schlüssel erleichtert ssh-agent. Wir verwenden den ssh-addBefehl, um private Schlüssel im Schlüsselbund von ssh-agent aufzulisten, hinzuzufügen und zu entfernen. Dann ssh-addsteht in Verbindung mit ssh-agentService , um die Aufgaben zu erfüllen.
  • keychainDieses Skript sucht nach einem ssh-agentDienst (falls nicht vorhanden, starten Sie einen neuen) und ruft ssh-addauf, um private SSH-Schlüssel hinzuzufügen. keychainhat eine einfache und unkomplizierte Idee, die unter Linux funktioniert, wo ssh-agent normalerweise nicht automatisch startet.
  • Keychain Access.appscheint die komplizierteste Komponente zu sein. Es ist der universelle Tokenspeicherdienst von Mac OS X. Es speichert verschiedene Token, z. B. Passwörter, Zertifikate usw., und dient als Token- Agent für die Apps, die die Token anfordern. In unserem Fall eines privaten SSH-Schlüssels wird zunächst die Anforderung für den Zugriff auf den privaten SSH-Schlüssel erfasst und ein Fenster geöffnet, in dem Sie aufgefordert werden, die SSH-Passphrase, eine Art Token, im Keychain Access.appSchlüsselbund zu speichern . Wenn Sie das nächste Mal private Schlüssel für die Authentifizierung verwenden, Keychain Access.appwird erneut ein Fenster geöffnet, in dem Sie gefragt werden, ob Sie die Berechtigung erteilen möchten. Nachdem Sie ein großes Ja erhalten haben, keychain Access.appfügen Sie Ihren privaten Schlüssel in ssh-agentden Speicher ein.

Zwei Dinge verdienen Ihre Aufmerksamkeit:

  1. Mac OS X Lion startet ssh-agentbeim Start automatisch einen Dienst und lauscht einem Socket unter /tmp.
  2. Keychain Access.appspeichert Ihre SSH-Passphrase, sodass Ihr privater Schlüssel hinzugefügt werden kann, ssh-agentohne Sie zu unterbrechen. Ja, Sie müssen Ihren SSH-Ausdruck 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 sollte SSH-Login-ohne-Fragen-Passphrase unter Mac OS X "out of box" funktionieren.


1

Für den Fall, dass andere Lösungen hier nicht für Menschen funktionieren, hat das Folgende für mich funktioniert.

Stellen Sie für jeden privaten Schlüssel in Ihrem ~ / .ssh-Verzeichnis sicher, dass der entsprechende öffentliche Schlüssel ebenfalls vorhanden ist. Stellen Sie sicher, dass der Name des öffentlichen Schlüssels mit dem Namen des privaten Schlüssels .pubam Ende identisch ist . Wenn Sie bereits einen geeigneten öffentlichen Schlüssel hatten, versuchen Sie ihn erneut zu generieren.

Wenn Sie die öffentlichen Schlüssel neu erstellen müssen, können Sie dies auf einfache Weise tun:

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

Ersetzen my_keydurch einen beliebigen Schlüssel.

Danach merkt sich MacOS die Passphrase des Schlüssels im Schlüsselbund, wie es sein sollte.

Hinweis: Die Eingabe der Passphrase und das Speichern des Schlüsselbunds ist jetzt nur eine einmalige Aktion (nicht einmal pro Anmeldesitzung als OP gewünscht). Vorausgesetzt, die Anmeldung am betreffenden Mac ist passwortgeschützt, wird Ihre Passphrase durch dieses Anmeldepasswort geschützt. Außerdem macht diese Lösung für mich keinen Sinn ... ein öffentlicher Schlüssel sollte nicht zusätzlich zum privaten Schlüssel erforderlich sein, aber aus irgendeinem Grund erfordert MacOSX dies.

(ursprünglich aus der Antwort auf eine ähnliche Frage in Apple Stack Exchange)


1

Das einzige, was ich beim Konfigurieren des ~/.sshOrdners selten erwähne, ist das Einschränken der Verzeichnisberechtigungen.

Damit ssh nicht nach dem Passwort fragen muss, musste ich immer die Berechtigungen für das Home-Verzeichnis des Benutzers 700und die für den ~/.sshOrdner festlegen 700.

Andernfalls werde ich weiterhin nach einem Passwort gefragt, auch wenn alle Schlüssel korrekt generiert und kopiert wurden. In den Authentifizierungsprotokollen wird eine Fehlermeldung generiert, die jedoch für den Endbenutzer größtenteils unsichtbar ist.


0

Eine andere Sache, die Sie hätten versuchen können, wäre gewesen, sie durch ssh-copy-idetwas zu ersetzen k="$(cat ~/.ssh/id_rsa.pub)"; ssh username@somehost.com "umask 0077; mkdir -p ~/.ssh; echo "$k" >> ~/.ssh/authorized_keys2".


0

Diese Antwort ist etwas nicht die Lösung für diese Frage; es ist jedoch sehr nahe (ich bin auf diese Frage gekommen, als ich nach einer Lösung für mein Problem gesucht habe).

Wie in dieser Frage beschrieben, mache ich auch eine Menge SSH auf Keychain Access.appRemoteservern auf meinem Mac. Allerdings hat die App die Schlüsselphrase gespeichert und ich muss sie nicht jedes Mal eingeben, wenn ich den Schlüssel zur Authentifizierung auf einem SSH-Server benötige.

Ich habe jedoch den SSH-Server auf meinem Mac aktiviert, damit ich eine Remoteverbindung herstellen kann. Bei der Remote-Anmeldung an meinem Mac wurde die Schlüsselphrase immer gefragt, wann ich einen weiteren Host SSH-fähig machen möchte.

Ich habe eine Lösung gefunden , mit der die Schlüsselphrase für die aktuelle Sitzung gespeichert werden kann. Ich dachte, dass dies für jemanden nützlich sein könnte, daher dieser Beitrag / diese Antwort.


Ich schrieb über meine ähnliche Lösung hier superuser.com/a/659668/154113
orkoden

0

Ich habe über dieses Problem nachgedacht. ssh funktioniert mit Ausnahme von Äpfeln auf jeder Maschine in unserer Abteilung (MacBooks oder iMacs spielen keine Rolle). Endlich hatte ich es satt, die Passwörter zu tippen und entschied mich, dies zu debuggen.

Ich ging zu meinem iMac und deaktivierte sshd im Bereich "Freigabeeinstellungen". Ich habe mich dann für root entschieden und "/ usr / sbin / sshd -d" eingegeben, um sshd im Debug-Modus zu starten. Ich habe dann versucht, auf diesen Rechner zu sshen und es wurde prompt versucht, Protokoll 2 zu verwenden, das alles in Ordnung zu sein scheint, aber sshd hat prompt gemeldet, dass es "authorized_keys" nicht finden konnte. Ich hatte eine authorized_keys2-Datei, die alle meine Linux-, Solaris-, You-Name-It-Unix-Boxen akzeptieren. Ich habe "authorized_keys2" einfach in "authorized_keys" und "BOOM" kopiert. Funktioniert jetzt perfekt.

Warum * keys statt * keys2 ist unbekannt. Besonders wenn os x mit known_hosts2 sehr zufrieden ist.

In jedem Fall können jetzt alle unsere Apple-Boxen angemeldet oder mit Remote-Befehlen ohne dieses Passwort ausgeführt werden: prompt ...

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.