Von Gast (nicht überprüft) , 29 April 2026

Einführung

Sich an einem Git-Remote zu authentifizieren ist meist unsichtbar, bis es schiefgeht. Die zwei Hauptmechanismen sind SSH-Schlüssel und HTTPS-Credentials (Passwörter oder, heute üblicher, Personal Access Tokens).

SSH-Schlüssel

Einen modernen Schlüssel generieren:

ssh-keygen -t ed25519 -C "[email protected]"
ssh-add --apple-use-keychain ~/.ssh/id_ed25519     # macOS
ssh-add ~/.ssh/id_ed25519                           # Linux

Fügen Sie den öffentlichen Schlüssel (~/.ssh/id_ed25519.pub) zu Ihrem Hosting-Konto hinzu. Testen:

ssh -T [email protected]
# Hi ada! You've successfully authenticated...

SSH-Konfig

Pro-Host-Überschreibungen gehen in ~/.ssh/config:

Host github.com
    User git
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes

HTTPS-Credentials

Die meisten Hosts akzeptieren keine Konto-Passwörter mehr; verwenden Sie ein Personal Access Token (PAT) mit den richtigen Scopes. Git speichert es über einen Credential-Helper:

git config --global credential.helper cache              # In-Memory, läuft ab
git config --global credential.helper "cache --timeout=86400"
git config --global credential.helper osxkeychain        # macOS
git config --global credential.helper manager            # Windows
git config --global credential.helper store              # Klartext-Datei (nur falls nötig)

Beim ersten Push fragt Git nach, und der Helper speichert das Token.

Inspizieren und Löschen

echo "url=https://github.com" | git credential fill
echo "url=https://github.com" | git credential reject

git credential ist eine Low-Level-Schnittstelle zum Helper.

Pro-Host-Helper

git config --global credential.https://github.com.helper manager
git config --global credential.https://gitlab.com.helper cache

Nützlich, wenn verschiedene Hosts verschiedene Auth-Methoden erfordern.

Commits und Tags signieren

Authentifizierung und Signierung sind unterschiedlich. Signierung beweist die Urheberschaft eines Commits:

git config --global gpg.format ssh
git config --global user.signingkey ~/.ssh/id_ed25519.pub
git commit -S -m "Signed commit"
git log --show-signature -1

2FA und SSO

Wenn Ihr Host 2FA erfordert, braucht HTTPS-Auth ein PAT (Passwörter sind blockiert). Für SSO-geschützte Organisationen muss das PAT auch SSO-autorisiert sein; sonst erhalten Pushes einen vagen "permission denied"-Fehler.

Pro-URL-Credentials

Gits Credential-System kann verschiedene Credentials pro Host oder Pfad speichern. Der Match-Schlüssel ist das URL-Präfix, sodass Sie etwa separate Tokens für Ihre persönliche und Arbeits-GitHub-Organisation haben können:

git config --global credential.https://github.com/work-org.helper manager
git config --global credential.https://github.com/personal.helper "store --file ~/.git-creds-personal"
git credential fill <<<"url=https://github.com/work-org/repo"

Die Einstellung credential.useHttpPath sagt Git, den Pfad in den Lookup-Schlüssel einzubeziehen, was pro-Repo-Credentials erlaubt. Verwenden Sie es nur bei Bedarf; es vervielfacht die Zahl gespeicherter Einträge.

Häufige Fehler

Mit einem Token pushen, dem die richtigen Scopes fehlen (z. B. read-only); die Fehlermeldung ist generisch. Übermäßig breite Scopes "zur Sicherheit" gewähren; minimieren. Tokens in credential.helper store auf gemeinsam genutzten Maschinen speichern; es ist eine Klartext-Datei. Vergessen, Ihren öffentlichen SSH-Schlüssel zum Host hochzuladen, und durch "permission denied (publickey)" verwirrt sein; ssh -vT git@host zeigt, was passiert. Schließlich: Protokolle mischen: Stellen Sie sicher, dass Ihre Remote-URL zu Ihrer Auth-Methode passt; git remote set-url kann wechseln.