Verwalten von SSH-Schlüsseln mit ssh-agent
In diesem Schritt lernen Sie, wie Sie Ihre SSH-Schlüssel mit ssh-agent
verwalten. Der ssh-agent
ist ein Programm, das im Hintergrund läuft und Ihre privaten Schlüssel im Arbeitsspeicher hält. Dies ist besonders nützlich, wenn Ihre privaten Schlüssel durch eine Passphrase geschützt sind. Anstatt die Passphrase jedes Mal einzugeben, wenn Sie den Schlüssel verwenden, geben Sie sie einmal ein, wenn Sie den Schlüssel zum ssh-agent
hinzufügen, und dann kümmert sich der Agent für den Rest Ihrer Sitzung um die Authentifizierung.
Obwohl Sie im vorherigen Schritt einen Schlüssel ohne Passphrase generiert haben, erstellen wir nun einen neuen Schlüssel mit einer Passphrase, um die Nützlichkeit von ssh-agent
zu demonstrieren.
Generieren Sie zunächst ein neues SSH-Schlüsselpaar mit einer Passphrase. Wir nennen diesen Schlüssel id_rsa_passphrase
, um ihn vom Standard-Schlüssel id_rsa
zu unterscheiden.
ssh-keygen -f ~/.ssh/id_rsa_passphrase
Sie werden aufgefordert, eine Passphrase einzugeben. Verwenden Sie für dieses Labor mypassphrase
als Passphrase.
Erstellung des öffentlichen/privaten RSA-Schlüsselpaares.
Passphrase eingeben (leer für keine Passphrase): mypassphrase
Passphrase nochmals eingeben: mypassphrase
Ihre Identifizierung wurde in /home/labex/.ssh/id_rsa_passphrase gespeichert
Ihr öffentlicher Schlüssel wurde in /home/labex/.ssh/id_rsa_passphrase.pub gespeichert
Der Schlüssel-Fingerabdruck lautet:
SHA256:BuSxVlJb1lsiUFi2I5DAvyL01fJ5d480LT86dgtcHEg labex@6846375f1c0e35fea6cb03e6
Das Zufallsbild des Schlüssels ist:
+---[RSA 3072]----+
| ...=o+=*. E |
| .o.*.=..+ o |
| .=.o o. = . |
| . .+... .. . .|
| . . . +S. + |
| . o ..o . o * .|
| . . . . = * |
| oooo|
| ..+.o|
+----[SHA256]-----+
Hinweis: Wenn Sie versehentlich die Eingabetaste drücken, ohne eine Passphrase einzugeben, wird der Schlüssel ohne Passphrase erstellt. In diesem Fall können Sie die Dateien löschen und den Befehl erneut ausführen, wobei Sie sicherstellen, dass Sie mypassphrase
eingeben, wenn Sie dazu aufgefordert werden.
Kopieren wir nun diesen neuen öffentlichen Schlüssel nach localhost
, damit Sie ihn für die Authentifizierung verwenden können.
ssh-copy-id -i ~/.ssh/id_rsa_passphrase.pub labex@localhost
Da Sie bereits eine passwortlose Authentifizierung mit Ihrem Standardschlüssel eingerichtet haben, wird der Befehl möglicherweise nicht nach einem Passwort fragen und Ihre vorhandene Authentifizierung verwenden:
/usr/bin/ssh-copy-id: INFO: Quelle der zu installierenden Schlüssel(e): "/home/labex/.ssh/id_rsa_passphrase.pub"
/usr/bin/ssh-copy-id: INFO: Versuch der Anmeldung mit den neuen Schlüssel(n), um bereits installierte zu filtern
/usr/bin/ssh-copy-id: INFO: 1 Schlüssel(e) müssen noch installiert werden -- wenn Sie jetzt aufgefordert werden, werden die neuen Schlüssel installiert
Anzahl der hinzugefügten Schlüssel(e): 1
Versuchen Sie nun, sich mit: "ssh 'labex@localhost'" bei der Maschine anzumelden, und prüfen Sie, ob nur die gewünschten Schlüssel(e) hinzugefügt wurden.
Versuchen Sie nun, eine Verbindung zu localhost
mit diesem neuen Schlüssel herzustellen. Sie müssen die private Schlüsseldatei mit der Option -i
angeben.
ssh -i ~/.ssh/id_rsa_passphrase labex@localhost
Wenn Sie eine Passphrase für den Schlüssel festgelegt haben, werden Sie danach gefragt. Wenn Sie den Schlüssel versehentlich ohne Passphrase erstellt haben (wie im Beispielausgabe gezeigt), werden Sie direkt angemeldet:
Letzter Login: Mo 09. Jun 01:39:25 2025 von 47.251.66.143
[labex@host ~]$
Sie sind angemeldet. Beenden Sie nun die Sitzung:
exit
exit
Verbindung zu localhost geschlossen.
[labex@host ~]$
Hinweis: Wenn Ihr Schlüssel keine Passphrase hat, können Sie trotzdem mit der ssh-agent
-Demonstration fortfahren, um zu verstehen, wie sie funktioniert, auch wenn in diesem Fall keine Passphrase abgefragt wird.
Starten Sie zunächst den ssh-agent
in Ihrer aktuellen Shell-Sitzung. Der Befehl eval
wird verwendet, um die Umgebungsvariablen korrekt festzulegen, die ssh-agent
ausgibt.
eval "$(ssh-agent)"
Agent-PID 1024
Die Ausgabe zeigt die Prozess-ID (PID) des ssh-agent
.
Als Nächstes fügen Sie Ihren privaten Schlüssel (id_rsa_passphrase
) zum ssh-agent
hinzu.
ssh-add ~/.ssh/id_rsa_passphrase
Wenn Ihr Schlüssel eine Passphrase hat, werden Sie danach gefragt. Wenn nicht, wird der Schlüssel direkt hinzugefügt:
Identität hinzugefügt: /home/labex/.ssh/id_rsa_passphrase (labex@6846375f1c0e35fea6cb03e6)
Nachdem der Schlüssel zum ssh-agent
hinzugefügt wurde, versuchen Sie erneut, eine Verbindung zu localhost
mit demselben Schlüssel herzustellen.
ssh -i ~/.ssh/id_rsa_passphrase labex@localhost
Sie sollten sich verbinden können, ohne nach einer Passphrase gefragt zu werden (ob Ihr Schlüssel eine hat oder nicht, da er jetzt vom Agenten verwaltet wird):
Letzter Login: Mo 09. Jun 01:39:49 2025 von 127.0.0.1
[labex@host ~]$
Sie haben ssh-agent
erfolgreich verwendet, um Ihren SSH-Schlüssel zu verwalten.
Wichtiger Hinweis: Die Umgebungsvariablen von ssh-agent
sind nur in der Shell-Sitzung verfügbar, in der Sie sie gestartet haben. Wenn Sie sich in einer SSH-Sitzung befinden, müssen Sie zurück zu Ihrer lokalen Shell wechseln, um ssh-add
-Befehle zu verwenden.
Beenden Sie zuerst die SSH-Sitzung:
exit
exit
Verbindung zu localhost geschlossen.
[labex@host ~]$
Um die derzeit im ssh-agent
geladenen Schlüssel anzuzeigen, können Sie ssh-add -l
verwenden:
ssh-add -l
Wenn der Agent läuft und Schlüssel geladen hat, sehen Sie eine Ausgabe wie:
3072 SHA256:BuSxVlJb1lsiUFi2I5DAvyL01fJ5d480LT86dgtcHEg /home/labex/.ssh/id_rsa_passphrase (RSA)
Wenn Sie jedoch eine Fehlermeldung wie "Could not open a connection to your authentication agent" sehen, bedeutet dies, dass die Agent-Umgebungsvariablen in Ihrer aktuellen Sitzung nicht gesetzt sind.
Um alle Identitäten vom ssh-agent
zu entfernen, verwenden Sie ssh-add -D
:
ssh-add -D
Wenn der Agent zugänglich ist, sehen Sie:
Alle Identitäten entfernt.
Wenn Sie jedoch "Could not open a connection to your authentication agent" sehen, bedeutet dies, dass der Agent in Ihrer aktuellen Sitzung nicht verfügbar ist.
Wenn Sie nun erneut eine Verbindung herstellen und Ihr Schlüssel eine Passphrase hat, werden Sie danach gefragt, da der Schlüssel vom Agenten entfernt wurde:
ssh -i ~/.ssh/id_rsa_passphrase labex@localhost
Wenn Ihr Schlüssel eine Passphrase hat, sehen Sie:
Passphrase für Schlüssel '/home/labex/.ssh/id_rsa_passphrase' eingeben:
Wenn Ihr Schlüssel keine Passphrase hat, können Sie sich trotzdem direkt verbinden. Drücken Sie Strg+C
, um den Verbindungsversuch abzubrechen, wenn Sie nach einer Passphrase gefragt werden.
Schließlich können Sie den ssh-agent
-Prozess mit ssh-agent -k
beenden:
ssh-agent -k
Wenn die Umgebungsvariable SSH_AGENT_PID nicht gesetzt ist, sehen Sie möglicherweise:
SSH_AGENT_PID nicht gesetzt, Agent kann nicht beendet werden
Dies ist normal, wenn der Agent in einer anderen Shell-Sitzung gestartet wurde oder wenn die Umgebungsvariablen nicht ordnungsgemäß exportiert wurden.