Skip to main content

Konfigurieren der SSH-Agent-Weiterleitung

Um die Bereitstellung auf einem Server zu vereinfachen, kannst du die SSH-Agent-Weiterleitung weiterleiten, um lokale SSH-Schlüssel sicher zu verwenden.

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 Enterprise Server 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@hostname in das Terminal eingibst:

$ ssh -T git@hostname
# 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.

  1. Öffne die Datei in ~/.ssh/config mithilfe deines bevorzugten Text-Editors. Wenn diese Datei nicht vorhanden ist, kannst du sie durch Eingabe von touch ~/.ssh/config im Terminal erstellen.

  2. 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@hostname 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@hostname
# 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@hostname: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.