ssh-add ist zwischen Neustarts nicht persistent

150

Ich habe dem Agenten einen SSH-Schlüssel hinzugefügt:

$ ssh-add ~/.ssh/id_rsa_mac
Identity added: /Users/alex/.ssh/id_rsa_mac (/Users/alex/.ssh/id_rsa_mac)

Nach einem Neustart hat der Agent diesen Schlüssel nicht mehr hinzugefügt:

$ ssh-add -l
The agent has no identities.

Warum ist das passiert?

ア ア ッ ク ク
quelle
Ich habe momentan keine Zeit, um vollständig zu antworten, aber der gpg-agent im ssh-Modus wird tun, was Sie wollen. Versuchen Sie das anstelle des alten ssh-Agenten. Wenn dies hilft, könnte ich versuchen, dies zu erweitern, wenn ich später Zeit habe.
Vality
@Vality: Ich bezweifle, dass der gpg-Agent nach einem Neustart dauerhaft bleibt.
Pavel Šimerda
@ PavelŠimerda Es verschlüsselt die privaten Schlüssel mit dem Benutzerpasswort und legt sie $HOME/.gnupg/private-keys-v1.dab, sobald Sie sie mit ssh-add hinzufügen. Es ist wirklich hartnäckig. Vorausgesetzt, Sie haben ein nichtflüchtiges Home-Verzeichnis.
Vality
@Vality: Sollte das nicht als Sicherheitsproblem angesehen werden? Könnten Sie nicht auch einen Schlüssel ohne Passphrase verwenden und damit fertig werden, ohne einen Agenten zu benötigen?
Pavel Šimerda
1
@ PavelŠimerda Es handelt sich nicht wirklich um ein Sicherheitsproblem, da der Schlüssel verschlüsselt mit dem Benutzerkennwort gespeichert wird. Das Kennwort muss jedoch jedes Mal eingegeben werden, wenn sich der Benutzer anmeldet, um es zu entschlüsseln. Das unverschlüsselte Speichern des Schlüssels bedeutet, dass ein Benutzer mit Rootberechtigung (oder ein Dieb, der Ihre Festplatte mitgenommen hat) sie aus Ihrem Home-Verzeichnis stehlen kann. Wenn er sie stiehlt, werden sie mit Ihrem Kennwort verschlüsselt und sind somit unbrauchbar.
Vality

Antworten:

174

Das Hinzufügen von Schlüsseln zum Agenten ist vorübergehend. Sie halten nur so lange an, wie der Agent ausgeführt wird. Wenn Sie es beenden oder Ihren Computer neu starten, gehen sie verloren, bis Sie sie erneut hinzufügen. Von der ssh-agentManpage:

ssh-agent ist ein Programm zur Speicherung privater Schlüssel für die Authentifizierung mit öffentlichen Schlüsseln (RSA, DSA, ECDSA). Die Idee ist, dass ssh-agent zu Beginn einer X-Sitzung oder einer Anmeldesitzung gestartet wird und alle anderen Fenster oder Programme als Clients für das Programm ssh-agent gestartet werden. Durch die Verwendung von Umgebungsvariablen kann der Agent gefunden und automatisch zur Authentifizierung verwendet werden, wenn Sie sich mit ssh (1) bei anderen Computern anmelden.

Der Agent verfügt zunächst über keine privaten Schlüssel. Schlüssel werden mit ssh-add (1) hinzugefügt. Wenn ohne Argumente ausgeführt, ssh-add (1) , um die Dateien hinzufügt ~/.ssh/id_rsa, ~/.ssh/id_dsa, ~/.ssh/id_ecdsaund ~/.ssh/identity. Wenn die Identität eine Passphrase hat, fragt ssh-add (1) nach der Passphrase auf dem Terminal, wenn es eine hat, oder von einem kleinen X11-Programm, wenn es unter X11 läuft. Ist dies nicht der Fall, schlägt die Authentifizierung fehl. Anschließend wird die Identität an den Agenten gesendet. Im Agenten können mehrere Identitäten gespeichert werden. Der Agent kann jede dieser Identitäten automatisch verwenden. ssh-add -lZeigt die derzeit vom Agenten gehaltenen Identitäten an.

macOS Sierra

Apple hat mit macOS Sierra 10.12.2 eine UseKeychain-Konfigurationsoption für SSH-Konfigurationen hinzugefügt. Sie können diese Funktion aktivieren, indem Sie sie UseKeychain yeszu Ihrer hinzufügen ~/.ssh/config.

Host *
  UseKeychain yes

OSX-Schlüsselbund

Ich verwende kein OSX, habe aber im SuperUser die folgenden Fragen und Antworten gefunden: Wie verwende ich den Mac OS X-Schlüsselbund 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.

So können Sie Ihre SSH-Schlüssel mithilfe des folgenden Befehls in den Schlüsselbund importieren:

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

Ihre Schlüssel sollten dann von Start zu Start bestehen bleiben.

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

Quelle: Super User - Wie verwende ich Mac OS X Keychain mit SSH-Schlüsseln?

slm
quelle
Ja wirklich? Unter Linux habe ich dieses Problem nicht. Muss ich bei jedem Neustart meines Computers "ssh-add my_key" ausführen?
ア ア ッ ク ス
2
@Alex Wie die Antwort erklärt, fügt der Agent automatisch hinzu ~/.ssh/id_rsa. Ich vermute, dies ist der Speicherort Ihrer Schlüsseldatei unter Linux. Es ist auch möglich, dass Sie nicht den Standard-SSH-Schlüsselagenten verwenden. Es gibt andere, wie z. B. Gnome-Keyring-Daemon, die sich möglicherweise anders verhalten.
Patrick
aber auf dem Mac heißt es "id_rsa_mac". Wie bringe ich den Agenten dazu, es automatisch hinzuzufügen?
ア ア ッ ク ス
@Patrick: Ich bin mir nicht sicher, ob der Klassiker ssh-agentautomatisch irgendwelche Schlüssel hinzufügt. Meiner Meinung nach ssh-addliest es die Standardspeicherorte oder den sshClient, wenn Sie den Agenten nicht verwenden.
Pavel Šimerda
5
Kleine Randnotiz: Wenn Ihr Befehl ssh-add das -K-Flag nicht erkennt, verwenden Sie wahrscheinlich die macports-Version von ssh-add. Sie können die macports-Version umgehen, indem Sie den vollständigen Pfad zur OSX-Version von ssh-add angeben wie /usr/bin/ssh-add -K /path/to/private/key
folgt
20

Dies ssh-agentist ein Sitzungsdienst, der Schlüssel für den Benutzer temporär speichert .

Der Hauptzweck des SSH-Agenten besteht darin, sich die Klartextversion eines Schlüssels zu merken, der mit einer Passphrase gesichert ist. Mit anderen Worten, der Schlüssel wird mit einer Passphrase verschlüsselt auf der Festplatte gespeichert, und der Eigentümer des Schlüssels verwendet ssh-addoder ein anderes GUI-Tool, um die Passphrase bereitzustellen, und weist den Agenten an, sich diese zu merken, bis die Sitzung beendet wird oder der Benutzer das Entfernen explizit anfordert.

Wenn Sie keine Passphrase verwenden und keine Agentenweiterleitung verwenden (was für die meisten Zwecke ohnehin unsicher ist), benötigen Sie den Agenten überhaupt nicht . Jeder SSH-Client sollte in der Lage sein, den Schlüssel von der Festplatte zu lesen, entweder von einem Standardspeicherort oder von einem explizit angegebenen Speicherort.

Die Standardpositionen sind auf der Handbuchseite aufgeführt ssh(1):

Die Standardeinstellung ist ~ / .ssh / identity für Protokollversion 1 und ~ / .ssh / id_dsa, ~ / .ssh / id_ecdsa, ~ / .ssh / id_ed25519 und ~ / .ssh / id_rsa für Protokollversion 2.

Wenn Sie nicht standardmäßige Speicherorte verwenden, können Sie den auf derselben Handbuchseite beschriebenen -iSchalter sshoder die entsprechende Option in dem von Ihnen verwendeten SSH-Client verwenden.

Pavel Šimerda
quelle
4
+1 für die Befürwortung der Nichtnutzung vonssh-agent
dg99
7

In Sierra :

Verwenden Sie UseKeychain . (Ich habe das nicht ausprobiert, aber es klingt wie die richtigste Lösung.)

Oder

ssh-add -K /your/key
echo ssh-add -A | cat >> ~/.bash_profile

Oder erstellen Sie eine plist-Datei, anstatt sie anzuhängen ~/.bash_profile.

Haftungsausschluss: Wie andere angemerkt haben, weiß ich nicht, wie sicher es ist, SSH-Passphrasen im Schlüsselbund zu speichern.

David Winiecki
quelle
Ich habe alle oben genannten Methoden ausprobiert, aber nur diese funktioniert. Danke!
Duannx