Fehlermeldung
error: gpg.ssh.allowedSignersFile needs to be configured and exist for ssh signature verification
Auch ausgegeben als
- fatal: either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured
`git log --show-signature` gibt dieselbe Zeile und danach „No signature“ für den Commit aus. Das sieht so aus, als wäre der Commit nicht signiert – er ist es aber.
Was der Fehler bedeutet
Der Commit trägt eine SSH-Signatur (`gpg.format ssh`), und Git prüft solche Signaturen mit `ssh-keygen -Y verify` gegen eine Allowed-Signers-Datei, die Identitäten (E-Mail-Adressen) vertrauenswürdigen öffentlichen Schlüsseln zuordnet. Eine solche Datei ist nicht konfiguriert, deshalb kann Git nicht entscheiden, ob die Signatur von jemandem stammt, dem du vertraust, und meldet einen Fehler statt eines Prüfergebnisses. Die Signatur selbst kann völlig gültig sein. Beim Signieren ist „either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured“ die entsprechende Lücke in der Konfiguration.
Warum der Fehler auftritt
SSH-Signierung eingerichtet, Prüfung nie konfiguriert
häufigAnleitungen zum Signieren von Commits mit SSH hören meist bei `gpg.format ssh` und `user.signingkey` auf. Das Signieren funktioniert; für die Prüfung braucht es zusätzlich `gpg.ssh.allowedSignersFile`.
Die konfigurierte Datei existiert nicht
gelegentlichEin Pfad aus einem Dotfiles-Repository, der auf diesem Rechner nicht existiert, oder ein `~`, das an der Stelle, an der die Konfiguration es enthält, nicht expandiert wird.
Prüfung in der CI ohne Allowed-Signers-Datei
gelegentlichSkripte für Branch-Schutz oder Releases, die `git verify-commit` ausführen, brauchen die Allowed-Signers-Datei im Job, nicht nur auf den Entwicklungsrechnern.
So behebst du den Fehler
- 1.
Allowed-Signers-Datei anlegen
Jede Zeile: Principal(s), optional Optionen wie `namespaces="git"`, danach der öffentliche Schlüssel. Git gleicht die E-Mail-Adresse des Committers mit dem Principal ab.
bash # One line per trusted signer: principal (email) + public key; namespaces restricts it to git echo "alice@example.com namespaces=\"git\" $(cut -d' ' -f1,2 ~/.ssh/id_ed25519.pub)" >> ~/.config/git/allowed_signers git config --global gpg.ssh.allowedSignersFile ~/.config/git/allowed_signers git verify-commit HEAD - 2.
Signierer des Teams im Repository pflegen
Liegt eine per Review freigegebene Datei im Repository, prüfen alle (auch die CI) mit demselben Satz von Schlüsseln; Änderungen daran durchlaufen das Code-Review.
bash # Team setup: a reviewed allowed_signers file in the repository git config gpg.ssh.allowedSignersFile .github/allowed_signers git log --show-signature -1