Icon Ressource

Git und SSH-Key mit Passphrase unter Windows

Ziel ist es, Windows, OpenSSH und Git so zu konfigurieren, dass eine wiederholte Eingabe der Passphrase eines SSH-Keys nicht mehr notwendig ist.

Allgemeine Hinweise:
Diese Anleitung basiert auf Windows 10 1909 und verwendet die PowerShell.

SSH-Agent automatisch und sofort starten

Hierfür verwende ich die in Windows 10 integrierte Version OpenSSH und dessen ssh-agent. Den Agent müssen wir so konfigurieren, dass dieser beim Start von Windows automatisch startet, und ihn anschließend auch direkt starten (da er durch die Konfiguration alleine erst beim nächsten Start von Windows gestartet werden würde). Wer weiß, wie das über die GUI geht, kann das gerne so machen. Der Service heißt dort "OpenSSH Authentication Agent". Wer nicht, führt in der PowerShell folgenden Befehl aus:

ssh-agent sofort und beim Systemstart starten:
Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service
Git anweisen, den OpenSSH-Client von Windows zu nutzen

Da OpenSSH lange nicht Teil von Windows war, bringt Git seinen eigenen OpenSSH-Client mit. Git lässt sich allerdings so konfigurieren, dass es stattdessen den Client von Windows verwenden soll. Dies ist notwendig, damit Git die Konfigurationen respektiert, die wir am Windows-internen OpenSSH vornehmen. Dies geht mit folgendem Befehl:

Git anweisen, OpenSSH von Windows zu verwenden:
git config --global core.sshCommand C:/Windows/System32/OpenSSH/ssh.exe
Neben der Schreibweise mit Forward-Slashes im Pfad sind auch folgende Varianten möglich, je nach Geschmack. Das Ergebnis in der Konfigurationsdatei ist jeweils anders, aber alles funktioniert gleich gut.

Code:
git config --global core.sshCommand C:\\Windows\\System32\\OpenSSH\\ssh.exe
git config --global core.sshCommand \`"C:\Windows\System32\OpenSSH\ssh.exe\`"

SSH-Key erstellen

Anschließend muss noch der Key erstellt werden. Ich bin hier so frei und orientiere mich an die Anleitung aus den GitHub-Docs.

SSH-Key erstellen:
ssh-keygen -t rsa -b 4096
Während dieses Vorgangs wird man aufgefordert, eine Passphrase für den Key festzulegen. Hierfür verwendet man natürlich ein sehr sicheres Passwort. Üblicherweise werden dadurch zwei Dateien im Benutzerverzeichnis erstellt: .ssh\id_rsa (der private Schlüssel) und .ssh\id_rsa.pub (der öffentliche Schlüssel)

Den SSH-Agent über den neuen SSH-Key informieren

Zuletzt muss man lediglich noch dem SSH-Agent mitteilen, dass er den neuen SSH-Key verwalten soll. Das sorgt letzten Endes dafür, dass man nicht bei jeder Verwendung von SSH die Passphrase des Keys eingeben muss. Da der Agent ja bei jedem Systemstart ebenfalls gestartet wird, gilt das auch über Neustarts hinweg. Den Key übergibt man dem Agent jetzt folgendermaßen:

SSH-Key im SSH-Agent hinterlegen:
ssh-add $env:userprofile\.ssh\id_rsa
Hierbei wird man ein weiteres (und ein letztes) Mal nach der Passphrase des SSH-Keys gefragt.

Öffentlichen Schlüssel auf Server verteilen

Der öffentliche Schlüssel (id_rsa.pub) muss natürlich noch auf die jeweils verwendeten Server verteilt werden. Wie das geht, hängt vom jeweiligen Server oder Service ab. Für GitHub gibt es eine Anleitung in den GitHub-Docs.

Fertig

Das wars. Jetzt kann man feucht-fröhnlich kunterbunte Git-Befehle in die Welt setzen, ohne dass man je wieder mit der Aufforderung belästigt wird, die Passphrase des SSH-Keys einzugeben.

Diese Einstellung gilt übrigens auch für allgemeine SSH-Befehle, bei denen das Windows-interne OpenSSH verwendet wird.
Autor
alinnert
Aufrufe
253
Erstellt am
Letzte Bearbeitung
Bewertung
0,00 Stern(e) 0 Bewertung(en)
Oben Unten