Mithilfe der SSH-Agent-Weiterleitung kann die Bereitstellung auf einem Server vereinfacht werden. Sie ermöglicht es dir, deine lokalen SSH-Schlüssel zu verwenden, anstatt Schlüssel (ohne Passphrasen!) auf deinem Server zu belassen.
Wenn du bereits einen SSH-Schlüssel für die Interaktion mit GitHub eingerichtet hast, kennst du dich wahrscheinlich mit ssh-agent
aus. Dieses Programm wird im Hintergrund ausgeführt und sorgt dafür, dass dein Schlüssel im Arbeitsspeicher geladen bleibt. Auf diese Weise musst du deine Passphrase bei Verwendung des Schlüssels nicht jedes Mal erneut eingeben. Besonders nützlich an dem Programm ist, dass du Servern wahlweise Zugriff auf deine lokale ssh-agent
-Instanz erteilen kannst, als würde die Instanz bereits auf dem Server ausgeführt wurden. Dies ist so, als würdest du jemanden bitten, seinen oder ihren Computer mit seinem oder ihrem Kennwort zu entsperren.
Eine ausführlichere Erläuterung der SSH-Agent-Weiterleitung findest du in dem Leitfaden mit IT-Tipps von Steve Friedl.
Einrichten der SSH-Agent-Weiterleitung
Stelle sicher, dass dein eigener SSH-Schlüssel eingerichtet ist und funktioniert. Falls du noch keine SSH-Schlüssel generiert hast, kannst du dies mithilfe unseres Leitfadens nachholen.
Du kannst die Funktionsfähigkeit deines lokalen Schlüssels testen, indem du ssh -T git@github.com
in das Terminal eingibst:
$ ssh -T git@github.com
# Attempt to SSH in to github
> Hi USERNAME! You've successfully authenticated, but GitHub does not provide
> shell access.
Das ist ein guter Ausgangspunkt. Nun werden wir SSH einrichten, um die Agent-Weiterleitung an deinen Server zu ermöglichen.
-
Öffne die Datei in
~/.ssh/config
mithilfe deines bevorzugten Text-Editors. Wenn diese Datei nicht vorhanden ist, kannst du sie durch Eingabe vontouch ~/.ssh/config
im Terminal erstellen. -
Gib den folgenden Text in die Datei ein, indem du
example.com
durch den Domänennamen oder die IP-Adresse deines Servers ersetzt:Host example.com ForwardAgent yes
Warning
Möglicherweise planst du, einen Platzhalter wie Host *
zu verwenden, um diese Einstellung auf alle SSH-Verbindungen anzuwenden. Das ist jedoch nicht empfehlenswert, da du deine lokalen SSH-Schlüssel an jeden Server weitergeben würdest, zu dem du eine SSH-Verbindung herstellst. Diese Server hätten zwar keinen direkten Zugriff auf die Schlüssel, könnten diese jedoch verwenden, um sich als du auszugeben, während die Verbindung besteht. Du solltest nur Server hinzufügen, denen du vertraust und die du mit der Agent-Weiterleitung verwenden möchtest.
Testen der SSH-Agent-Weiterleitung
Um die Funktionsfähigkeit der Agent-Weiterleitung mit deinem Server zu testen, kannst du eine SSH-Verbindung zu deinem Server herstellen und ssh -T git@github.com
erneut ausführen. Wenn alles gut funktioniert, erhältst du die gleiche Aufforderung, die du auch lokal erhalten hast.
Wenn du nicht sicher bist, ob dein lokaler Schlüssel verwendet wird, kannst du auch die Variable SSH_AUTH_SOCK
auf deinem Server überprüfen:
$ echo "$SSH_AUTH_SOCK"
# Print out the SSH_AUTH_SOCK variable
> /tmp/ssh-4hNGMk8AZX/agent.79453
Wenn die Variable nicht festgelegt ist, bedeutet dies, dass die Agent-Weiterleitung nicht funktioniert:
$ echo "$SSH_AUTH_SOCK"
# Print out the SSH_AUTH_SOCK variable
> [No output]
$ ssh -T git@github.com
# Try to SSH to github
> Permission denied (publickey).
Problembehandlung der SSH-Agent-Weiterleitung
Dieser Abschnitt erhält einige Hinweise, auf die du bei der Problembehandlung der SSH-Agent-Weiterleitung achten kannst.
Auschecken von Code musst du eine SSH-URL verwenden
Die SSH-Weiterleitung funktioniert nur mit SSH-URLs, nicht HTTP(s)-URLs. Überprüfe die Datei .git/config
auf deinem Server, und stelle sicher, dass die URL ein SSH-Format wie das folgende aufweist:
[remote "origin"]
url = git@github.com:YOUR_ACCOUNT/YOUR_PROJECT.git
fetch = +refs/heads/*:refs/remotes/origin/*
Deine SSH-Schlüssel müssen lokal funktionieren
Bevor deine Schlüssel mit der Agent-Weiterleitung verwendet werden können, müssen sie zunächst lokal funktionieren. Unser Leitfaden zum Generieren von SSH-Schlüsseln kann dir helfen, deine SSH-Schlüssel lokal einzurichten.
Dein System muss die SSH-Agent-Weiterleitung zulassen
In manchen Fällen lassen Systemkonfigurationen die SSH-Agent-Weiterleitung nicht zu. Indem du den folgenden Befehl im Terminal eingibst, kannst du überprüfen, ob eine Systemkonfigurationsdatei verwendet wird:
$ ssh -v URL
# Connect to the specified URL with verbose debug output
> OpenSSH_8.1p1, LibreSSL 2.7.3
> debug1: Reading configuration data /Users/YOU/.ssh/config
> debug1: Applying options for example.com
> debug1: Reading configuration data /etc/ssh_config
> debug1: Applying options for *
$ exit
# Returns to your local command prompt
Im obigen Beispiel wird die Datei ~/.ssh/config
zuerst geladen, und dann wird /etc/ssh_config
gelesen. Wir können der folgenden Befehle überprüfen, ob diese Datei unsere Optionen überschreibt:
$ cat /etc/ssh_config
# Print out the /etc/ssh_config file
> Host *
> SendEnv LANG LC_*
> ForwardAgent no
In diesem Beispiel enthält die Datei /etc/ssh_config
explizit die Angabe ForwardAgent no
. Hierbei handelt es sich um eine Möglichkeit ist, die Agent-Weiterleitung zu blockieren. Wenn du diese Zeile aus der Datei löschst, sollte die Agent-Weiterleitung wieder funktionieren.
Dein Server muss die SSH-Agent-Weiterleitung für eingehende Verbindungen zulassen
Die Agent-Weiterleitung kann auch auf deinem Server blockiert werden. Du kannst überprüfen, ob die Agent-Weiterleitung zulässig ist, indem du eine SSH-Verbindung zum Server herstellst und sshd_config
ausführst. Die Ausgabe dieses Befehls sollte angeben, dass AllowAgentForwarding
festgelegt ist.
Deine lokale ssh-agent
-Instanz muss ausgeführt werden
Unter den meisten Computern startet das Betriebssystem ssh-agent
automatisch für dich. Unter Windows musst du den Start jedoch manuell ausführen. Wir haben einen Leitfaden zum Starten von ssh-agent
beim Öffnen von Git Bash verfasst.
Um zu überprüfen, ob ssh-agent
auf deinem Computer ausgeführt wird, gib den folgenden Befehl in das Terminal ein:
$ echo "$SSH_AUTH_SOCK"
# Print out the SSH_AUTH_SOCK variable
> /tmp/launch-kNSlgU/Listeners
Dein Schlüssel muss für ssh-agent
verfügbar sein.
Du kannst überprüfen, ob der Schlüssel für ssh-agent
sichtbar ist, indem du den folgenden Befehl ausführst:
ssh-add -L
Wenn der Befehl angibt, dass keine Identität verfügbar ist, musst du deinen Schlüssel hinzufügen:
ssh-add YOUR-KEY
Unter macOS „vergisst“ ssh-agent
diesen Schlüssel, sobald das Programm durch einen Neustart neu gestartet wird. Du kannst deine SSH-Schlüssel jedoch mithilfe des folgenden Befehls in Keychain importieren:
ssh-add --apple-use-keychain YOUR-KEY
Hinweis: Die --apple-use-keychain
-Option speichert die Passphrase in der Keychain für dich, wenn du einen SSH-Schlüssel zum SSH-Agent hinzufügst. Wenn du keine Passphrase zu deinem Schlüssel hinzufügen möchtest, führe den Befehl ohne die --apple-use-keychain
-Option aus.
Die Option --apple-use-keychain
ist in der Standardversion von ssh-add
von Apple enthalten. In macOS-Versionen vor Monterey (12.0) wurde für die Flags --apple-use-keychain
und --apple-load-keychain
die Syntax -K
bzw -A
verwendet.
Wenn Du die Apple-Standardversion von ssh-add
nicht installiert hast, tritt möglicherweise ein Fehler auf. Weitere Informationen findest du unter Fehler: ssh-add: unrechtmäßige Option – apple-use-keychain.
Wenn du weiterhin zur Eingabe deiner Passphrase aufgefordert wirst, musst du den Befehl möglicherweise in deiner Datei ~/.zshrc
(bzw. für die Bash deiner Datei ~/.bashrc
) hinzufügen.