Git-Authentifizierung unter Windows — Credential Manager · SSH · Commit-Signierung
Reibungslose Git-Authentifizierung unter Windows: Git Credential Manager, SSH-Schlüssel, SSH-Signierung, Multi-Account.
Git-Authentifizierung unter Windows ist etwas kniffliger als unter macOS/Linux — Git Credential Manager (GCM), OpenSSH und der 1Password-Agent können kollidieren. Dieser Leitfaden beschreibt eine einmalige, saubere Einrichtung, die man ein Jahr lang nicht anfassen muss.
Zielgruppe: Windows 11 + Git for Windows + GitHub (nach der Windows-Ersteinrichtung).
TL;DR
- Git Credential Manager (GCM) — OAuth (Browser-Anmeldung) für HTTPS-Klone
- OpenSSH-Schlüssel — für SSH-Klone. Ed25519 empfohlen
- Commit-Signierung — via SSH-Schlüssel (einfacher als GPG)
- Arbeit/Privat trennen —
Include.pathoder~/.ssh/config-Host-Aliasse - 1Password SSH-Agent (optional) — Schlüssel im Vault
Voraussetzungen
- Git for Windows 2.40+ —
winget install --id Git.Git(Windows-Ersteinrichtung) - OpenSSH-Client aktiviert (Standard unter Win11) — prüfen mit
Get-WindowsCapability -Online -Name "OpenSSH.Client*"
1. Git Credential Manager — HTTPS
GCM ist in Git for Windows enthalten. HTTPS-Klone/-Pushes öffnen automatisch den OAuth-Browser-Flow:
git clone https://github.com/user/repo.git
# Browser öffnet sich → GitHub-Anmeldung → Token wird automatisch gespeichertSpeicherort: Windows Credential Manager (Systemsteuerung → Benutzerkonten → Credential Manager → Windows-Anmeldeinformationen).
Prüfen
git config --global credential.helper
# managerBei manager ist GCM aktiv. Andernfalls:
git config --global credential.helper managerMulti-Account (Arbeit + privates GitHub)
Unterschiedliche Helper pro URL:
git config --global --add credential.https://github.com.useHttpPath trueJetzt gibt es separate Anmeldedaten pro Pfad auf demselben Host.
2. SSH-Schlüssel
SSH ist reibungsloser als HTTPS (kein Browser). Einen Ed25519-Schlüssel generieren:
ssh-keygen -t ed25519 -C "you@example.com"
# Pfad: ~/.ssh/id_ed25519 (Standard)
# Passphrase: empfohlen (1Password-Agent entsperrt automatisch)Den öffentlichen Schlüssel anzeigen:
Get-Content ~/.ssh/id_ed25519.pub
# ssh-ed25519 AAAA... you@example.comGitHub → Einstellungen → SSH- und GPG-Schlüssel → Neuer SSH-Schlüssel → öffentlichen Schlüssel einfügen.
ssh-agent aktivieren (Passphrase automatisch entsperren)
# Administrator-PowerShell
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
# Normale PowerShell
ssh-add ~/.ssh/id_ed25519
# Passphrase einmal eingeben; danach automatischSSH prüfen
ssh -T git@github.com
# Hi yourname! You've successfully authenticated, but GitHub does not provide shell access.Remote-URL wechseln (HTTPS → SSH)
git remote set-url origin git@github.com:user/repo.git3. Commit-Signierung mit SSH
Einfacher als GPG und verwendet denselben Schlüssel wieder. Erfordert Git 2.34+.
git config --global gpg.format ssh
git config --global user.signingkey "ssh-ed25519 AAAA... you@example.com"
git config --global commit.gpgsign true
git config --global tag.gpgsign trueuser.signingkey ist die vollständige Zeile des öffentlichen Schlüssels. Oder ein Dateiverweis:
git config --global user.signingkey "C:/Users/me/.ssh/id_ed25519.pub"Den Signierschlüssel bei GitHub registrieren
Denselben öffentlichen Schlüssel auf GitHub registrieren → SSH- und GPG-Schlüssel → Neuen SSH-Schlüssel hinzufügen → Schlüsseltyp = Signing Key.
Test
git commit --allow-empty -m "test signed"
git log --show-signature -1
# Good "git" signature with ED25519 key SHA256:...Das „Verified"-Abzeichen auf der PR-Seite überprüfen.
allowed_signers-Datei (für lokale Verifizierung erforderlich)
~/.config/git/allowed_signers:
you@example.com ssh-ed25519 AAAA...
coworker@example.com ssh-ed25519 BBBB...
git config --global gpg.ssh.allowedSignersFile "$HOME/.config/git/allowed_signers"git log --show-signature verifiziert jetzt auch Commits anderer.
4. Mehrere GitHub-Konten (Arbeit + Privat)
4.1 SSH-Konfiguration — Host-Aliasse
~/.ssh/config:
Host github.com-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
IdentitiesOnly yes
Host github.com-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yes
Klonen:
git clone git@github.com-personal:personal-user/repo.git
git clone git@github.com-work:company/repo.git4.2 Ordnerspezifische user.email — includeIf
~/.gitconfig:
[user]
name = Your Name
email = personal@example.com
[includeIf "gitdir:C:/Users/me/work/"]
path = C:/Users/me/.gitconfig-work~/.gitconfig-work:
[user]
email = me@company.com
signingkey = ssh-ed25519 AAAA... me@company.comRepos unter C:/Users/me/work/ verwenden automatisch die Arbeits-E-Mail/-Schlüssel.
Prüfen:
cd C:\Users\me\work\some-repo
git config user.email
# me@company.com
cd C:\Users\me\personal\some-repo
git config user.email
# personal@example.com5. 1Password SSH-Agent (optional)
Siehe Passwort-Manager. Unter Windows den Agent-Socket über Umgebungsvariable setzen:
- 1Password Desktop → Einstellungen → Entwickler → „SSH-Agent verwenden" ✅
- SSH-Schlüssel im 1Password-Vault speichern + bei GitHub registrieren
- PowerShell
$PROFILE:$env:SSH_AUTH_SOCK = '\\.\pipe\openssh-ssh-agent' - Neues Terminal →
ssh -T git@github.com→ einmal Windows Hello
Jetzt funktionieren SSH und Commit-Signierung ohne ~/.ssh/id_*-Klartextdateien auf der Festplatte.
6. Überprüfung
ssh -T git@github.com— Authentifizierung OKgit clone git@github.com:you/repo.git— keine Passphrase-Eingabe (oder einmaliger biometrischer Tap)git commit --allow-empty -m test && git log --show-signature -1— „Good signature"- PR auf GitHub zeigt das „Verified"-Abzeichen
- Unterschiedliche
git config user.emailin Arbeits- vs. privaten Ordnern
Fehlerbehebung
ssh: connect to host github.com port 22: Connection timed out
Unternehmens-Firewall blockiert Port 22. SSH über 443 verwenden:
# ~/.ssh/config
Host github.com
HostName ssh.github.com
Port 443
Permission denied (publickey)
- Dateiberechtigungen des Schlüssels —
icacls ~/.ssh/id_ed25519 /inheritance:r /grant:r "$($env:USERNAME):(R)" - Öffentlicher Schlüssel nicht bei GitHub registriert
GCM deaktiviert
git config --global credential.helper manager
git config --global credential.helperSelector prompt1Password SSH-Agent nicht erkannt
- Desktop-App läuft + angemeldet + Entwickleroption aktiviert
- Exakter
SSH_AUTH_SOCK-Wert (\\.\pipe\openssh-ssh-agent) - Konflikt: Wenn der OpenSSH-Agent-Dienst läuft, könnte dessen Socket Vorrang haben.
Stop-Service ssh-agentoder deaktivieren
Commit-Signierung zeigt „Unverified"
- SSH-Schlüssel auf GitHub als Signing Key registrieren (getrennt von der Authentifizierung)
git config --global gpg.format sshfehlt- Schlüssel beschädigt — neu generieren + neu registrieren
includeIf wird nicht ausgelöst
- Git 2.36+ erforderlich (ältere Git for Windows-Versionen ohne Unterstützung)
- gitdir-Pfad benötigt abschließenden
/(C:/Users/me/work/) - Unter Windows
/statt\verwenden
Referenzen
- Windows-Ersteinrichtung — Git for Windows Vorinstallation
- Passwort-Manager — 1Password SSH-Agent-Integration
- Plattformübergreifende Dotfiles — dieselbe Git-Konfiguration auf beiden Maschinen mit chezmoi
- GCM (offiziell)
Changelog
- 2026-05-12: Erster Entwurf. GCM + SSH-Schlüssel + SSH-Signierung + Multi-Account + 1Password-Agent + sechs Fehlerbehebungsfälle.