Die Beherrschung von SSH Agent und Agent Forwarding für nahtlose Authentifizierung
Nutzen Sie ssh-agent und Agent-Weiterleitung sicher für passwortgeschützte Schlüssel, Sprunghosts und Multi-Hop-SSH-Workflows.
SSH-Agent und Agent-Weiterleitung für nahtlose Authentifizierung meistern
Die SSH-Schlüsselauthentifizierung (Secure Shell) ist sicherer als wiederverwendbare Passwörter, aber Passphrasen können Sie verlangsamen, wenn Sie eine Verbindung zu vielen Hosts herstellen. ssh-agent löst dieses Problem, indem es entsperrte Schlüssel für Ihre aktuelle Anmeldesitzung verfügbar hält, und die Agent-Weiterleitung ermöglicht es Ihnen, diese lokalen Schlüssel über einen vertrauenswürdigen Sprunghost zu verwenden. Mit Bedacht eingesetzt, erhalten Sie so einen reibungsloseren SSH-Zugriff, ohne private Schlüssel auf Server kopieren zu müssen.
Den SSH-Agent verstehen
Der ssh-agent ist ein Hintergrundprogramm, das Ihre privaten SSH-Schlüssel sicher im Speicher hält, entschlüsselt und einsatzbereit. Anstatt dass Sie bei jeder Verbindung zu einem entfernten Server Ihre Passphrase eingeben müssen, geben Sie sie nur einmal ein, wenn Sie den Schlüssel zum Agent hinzufügen. Dies verbessert die Workflow-Effizienz erheblich, ohne die Sicherheit zu beeinträchtigen, die der Passphrasenschutz bietet.
Den SSH-Agent starten und verwalten
Der Prozess des Startens des Agents und der Bereitstellung seines Sockets für Ihre Shell-Sitzung ist entscheidend. Auf den meisten modernen Linux- und macOS-Systemen wird der Agent oft automatisch von den Initialisierungsskripten des Systems oder Ihrer Desktop-Umgebung gestartet.
Wenn Sie ihn manuell starten müssen, verwenden Sie die folgende Befehlssequenz. Dadurch wird sichergestellt, dass die notwendigen Umgebungsvariablen (SSH_AUTH_SOCK und SSH_AGENT_PID) korrekt für Ihre aktuelle Shell-Sitzung gesetzt werden:
# Starten Sie den Agent und geben Sie die notwendigen Umgebungsvariablen aus
eval "$(ssh-agent -s)"
Schlüssel zum Agent hinzufügen
Sobald der Agent läuft, verwenden Sie den Befehl ssh-add, um Ihre privaten Schlüssel in seinen Speicher zu laden. Wenn Ihr Schlüssel durch eine Passphrase geschützt ist, werden Sie aufgefordert, diese jetzt einzugeben.
Beispiel: Hinzufügen eines Standardschlüssels
ssh-add
# Passphrase eingeben, wenn dazu aufgefordert
# Identität hinzugefügt: /home/user/.ssh/id_ed25519 (user@localbox)
Beispiel: Hinzufügen einer bestimmten Schlüsseldatei
ssh-add ~/.ssh/my_project_key
Geladene Schlüssel überprüfen
Sie können überprüfen, welche Schlüssel der Agent derzeit verwaltet, indem Sie das Flag -l verwenden:
ssh-add -l
# Beispielausgabe:
2048 SHA256:abcdef1234567890... user@localbox (RSA)
Verwenden Sie Passphrasen für private Schlüssel. Der Agent bewahrt Sie vor wiederholten Eingabeaufforderungen während der Sitzung; er macht einen ungeschützten privaten Schlüssel auf der Festplatte nicht sicherer.
SSH-Agent-Weiterleitung entmystifizieren
Die Agent-Weiterleitung ist eine leistungsstarke Funktion, mit der Sie die in Ihrem lokalen ssh-agent geladenen Schlüssel verwenden können, um sich bei einem zweiten entfernten Host zu authentifizieren, mit dem Sie vom ersten entfernten Host aus verbinden.
Dies ist nützlich für Multi-Hop-Workflows, z. B. wenn Sie von Ihrem Laptop eine Verbindung zu einem Bastion-Host und von diesem Bastion-Host zu einem internen Server herstellen.
Wie Agent-Weiterleitung funktioniert
Wenn Sie mit aktivierter Agent-Weiterleitung eine Verbindung zu Host A herstellen, erstellt SSH einen speziellen UNIX-Domain-Socket auf Host A. Dieser Socket fungiert als Proxy. Wenn Sie versuchen, von Host A eine SSH-Verbindung zum Ziel-Host B herzustellen, leitet der SSH-Client von Host A die Authentifizierungsanforderung über diesen Proxy-Socket zurück zum laufenden ssh-agent Ihres lokalen Rechners. Der Agent bearbeitet die kryptografische Herausforderung mit Ihrem gespeicherten privaten Schlüssel und sendet das Erfolgssignal zurück, wodurch die Authentifizierung bei Host B abgeschlossen wird.
Ihr privater Schlüssel verlässt Ihren lokalen Rechner nicht. Der entfernte Host erhält Zugriff auf einen temporären Agent-Socket, nicht auf die Schlüsseldatei selbst.
Agent-Weiterleitung aktivieren
Um die Agent-Weiterleitung beim Verbinden mit einem entfernten Host zu aktivieren, verwenden Sie das Flag -A mit dem Befehl ssh:
ssh -A user@bastion-host
Sie können es auch für einen vertrauenswürdigen Host in ~/.ssh/config konfigurieren:
Host bastion-host
Hostname 192.168.1.100
User myuser
ForwardAgent yes
Agent-Weiterleitung testen
Nachdem Sie erfolgreich eine Verbindung zum Bastion-Host mit aktivierter Weiterleitung hergestellt haben, testen Sie, ob der Agent-Socket auf dem entfernten Rechner verfügbar ist. Sie können das Vorhandensein der Umgebungsvariablen SSH_AUTH_SOCK überprüfen oder ssh-add -l auf dem entfernten Rechner verwenden:
Auf dem Bastion-Host:
# Prüfen, ob Schlüssel weitergeleitet werden (der lokal laufende Agent sollte antworten)
ssh-add -l
# Bei Erfolg sehen Sie die von Ihrem LOKALEN Agent verwalteten Schlüssel.
Jetzt können Sie vom Bastion-Host aus eine SSH-Verbindung zum internen Ziel-Host unter Verwendung der Schlüsselauthentifizierung herstellen, ohne dass die private Schlüsseldatei jemals auf dem Bastion-Host vorhanden ist:
Auf dem Bastion-Host:
ssh user@target-host
# Die Authentifizierung erfolgt nahtlos unter Verwendung Ihres lokalen Schlüssels über den weitergeleiteten Agent-Socket.
Sicherheitsaspekte
Die Agent-Weiterleitung ist praktisch, verändert aber Ihr Risikoprofil.
Wenn die Weiterleitung auf einem entfernten Host aktiv ist, kann ein Benutzer mit Root-Zugriff auf diesem Host normalerweise auf Ihren weitergeleiteten Agent-Socket zugreifen, während Ihre SSH-Sitzung geöffnet ist. Er kann Ihren privaten Schlüssel nicht aus dem Agent lesen, aber er kann möglicherweise den Agent auffordern, Authentifizierungs-Herausforderungen für andere Server zu signieren, auf die Sie zugreifen können.
Minderungsstrategien
- Weiterleitung standardmäßig deaktiviert lassen: Verwenden Sie
-Anur, wenn Sie es für eine bestimmte Multi-Hop-Aufgabe benötigen. - Weiterleitung in
~/.ssh/configeinschränken: Aktivieren Sie die Weiterleitung nur für vertrauenswürdige Sprungserver.Host trusted-jump ForwardAgent yes Host untrusted-server ForwardAgent no - Bestätigung für sensible Schlüssel anfordern:
ssh-add -c ~/.ssh/schluesselnamefragt vor der Verwendung des Schlüssels durch den Agent nach einer Bestätigung. Dies hilft, wenn ein weitergeleiteter Agent einem Host ausgesetzt ist, den Sie verwalten, aber nicht vollständig vertrauen. ProxyJumpbevorzugen, wenn keine Weiterleitung benötigt wird: Wenn Ihr Ziel nur darin besteht, einen privaten Host über einen Bastion zu erreichen, vermeidetssh -J user@bastion user@targetoft die Weiterleitung des Agents an den Bastion.
Den Agent-Lebenszyklus verwalten
Es ist gute Praxis, den Lebenszyklus Ihres Agents zu verwalten, insbesondere wenn er manuell durchgeführt wird. Wenn Sie Ihre Terminal-Sitzung schließen, könnte der Agent im Hintergrund weiterlaufen, Ressourcen verbrauchen und möglicherweise den Socket aktiv lassen.
Schlüssel entfernen
Um einen bestimmten Schlüssel aus dem Speicher des Agents zu entfernen:
ssh-add -d ~/.ssh/my_project_key
Um alle Schlüssel aus dem Agent zu entfernen:
ssh-add -D
Den Agent stoppen
Um den Agent-Prozess zu beenden und alle geladenen Schlüssel aus dem Speicher zu löschen:
ssh-agent -k
Dies gibt Shell-Befehle aus, um die zugehörigen Umgebungsvariablen zu entfernen und den Agent-Prozess zu beenden. Wenn Sie den Agent mit eval "$(ssh-agent -s)" gestartet haben, führen Sie eval "$(ssh-agent -k)" aus, um diese Bereinigung auf Ihre aktuelle Shell anzuwenden.
Wichtige Erkenntnis
Verwenden Sie ssh-agent für die tägliche Schlüsselverwaltung und reservieren Sie die Agent-Weiterleitung für vertrauenswürdige Sprunghosts, bei denen Sie sie wirklich benötigen. Versuchen Sie für einfachen Bastion-Zugriff zuerst ProxyJump; für weitergeleitete Agents halten Sie Sitzungen kurz und entfernen Sie Schlüssel, die Sie nicht mehr benötigen, mit ssh-add -d oder ssh-add -D.