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, keychain
das 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.
- Was ist
ssh-agent
,ssh-add
,keychain
,Keychain Access.app
und wie sie miteinander interagieren? - 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?
- 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 "[email protected]"
# 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!
Antworten:
ssh-agent
ist 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 Fernbedienungsshd
bei der ersten Verbindung automatisch zur Verfügung . (ssh-add
ist einfach der Befehl, dem Sie manuell einen privaten Schlüssel hinzufügenssh-agent
).In OS X sollten Sie ab Leopard nie mehr ausführen
ssh-agent
oderssh-add
manuell 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-agent
sodass Sie nie wieder dazu aufgefordert werden.Dies wird durch eine
launchd
Konfiguration erledigt, die auf Verbindungen auf dem$SSH_AUTH_SOCK
Socket wartet und automatisch gestartet wird,ssh-agent
wenn dies zum ersten Mal erforderlich ist. danach,ssh-agent
nur aufgefordert, Anmeldeinformationen , wenn es einen neuen Schlüssel öffnen muss.Wenn das nicht funktioniert, stellen Sie sicher, dass Sie die richtige
launchd
Konfigurationsdatei haben: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/
quelle
~/tmp
, der auf/tmp/
einen Cron-Job zeigt, der~/tmp
alle 2 Stunden bereinigt wird, wodurch auch der Ssh-Agent-Socket entfernt wurde. Oh man, ich hasse mich.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.app
Arbeit. 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.app
auf dem Mac.ssh-agent
ist der entscheidende Dienst, um die Verwendung des privaten SSH-Schlüssels ohne Eingabe der SSH-Passphrase zu aktivieren.ssh-agent
funktioniert 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ötigtssh-agent
wird , 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 vonssh-agent
zunächst hinzugefügt wird .ssh-add
ist Teil derssh-agent
Sammlung, die das Verwalten Ihrer SSH-Schlüssel erleichtertssh-agent
. Wir verwenden denssh-add
Befehl, um private Schlüssel im Schlüsselbund von ssh-agent aufzulisten, hinzuzufügen und zu entfernen. Dannssh-add
steht in Verbindung mitssh-agent
Service , um die Aufgaben zu erfüllen.keychain
Dieses Skript sucht nach einemssh-agent
Dienst (falls nicht vorhanden, starten Sie einen neuen) und ruftssh-add
auf, um private SSH-Schlüssel hinzuzufügen.keychain
hat eine einfache und unkomplizierte Idee, die unter Linux funktioniert, wo ssh-agent normalerweise nicht automatisch startet.Keychain Access.app
scheint 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, imKeychain Access.app
Schlüsselbund zu speichern . Wenn Sie das nächste Mal private Schlüssel für die Authentifizierung verwenden,Keychain Access.app
wird 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.app
fügen Sie Ihren privaten Schlüssel inssh-agent
den Speicher ein.Zwei Dinge verdienen Ihre Aufmerksamkeit:
ssh-agent
beim Start automatisch einen Dienst und lauscht einem Socket unter/tmp
.Keychain Access.app
speichert Ihre SSH-Passphrase, sodass Ihr privater Schlüssel hinzugefügt werden kann,ssh-agent
ohne 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.
quelle
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
.pub
am 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:
Ersetzen
my_key
durch 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)
quelle
Das einzige, was ich beim Konfigurieren des
~/.ssh
Ordners 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
700
und die für den~/.ssh
Ordner festlegen700
.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.
quelle
Eine andere Sache, die Sie hätten versuchen können, wäre gewesen, sie durch
ssh-copy-id
etwas zu ersetzenk="$(cat ~/.ssh/id_rsa.pub)"; ssh [email protected] "umask 0077; mkdir -p ~/.ssh; echo "$k" >> ~/.ssh/authorized_keys2"
.quelle
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.app
Remoteservern 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.
quelle
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 ...
quelle