Message d’erreur
error: gpg.ssh.allowedSignersFile needs to be configured and exist for ssh signature verification
Également affiché sous la forme
- fatal: either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured
`git log --show-signature` affiche la même ligne, puis « No signature » pour le commit, ce qui laisse croire que le commit n’est pas signé ; ce n’est pas le cas.
Ce que cela signifie
Le commit porte une signature SSH (`gpg.format ssh`), et Git vérifie ces signatures avec `ssh-keygen -Y verify` à l’aide d’un fichier « allowed signers » qui associe des identités (adresses e-mail) à des clés publiques de confiance. Aucun fichier de ce type n’est configuré : Git ne peut donc pas déterminer si la signature provient de quelqu’un en qui vous avez confiance, et signale une erreur au lieu d’un verdict. La signature elle-même peut être parfaitement valide. Côté signature, « either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured » signale le même manque dans la configuration.
Pourquoi cela se produit
Signature SSH en place, vérification jamais configurée
fréquenteLes guides sur la signature des commits avec SSH s’arrêtent généralement à `gpg.format ssh` et `user.signingkey`. La signature fonctionne ; la vérification exige en plus `gpg.ssh.allowedSignersFile`.
Le fichier configuré n’existe pas
occasionnelleUn chemin issu d’un dépôt de dotfiles, absent de cette machine, ou un `~` resté non développé à l’endroit où la configuration a été écrite.
Vérification en CI sans le fichier des signataires
occasionnelleLes scripts de protection de branche ou de publication qui exécutent `git verify-commit` ont besoin du fichier des signataires autorisés dans le job, pas seulement sur les machines des développeurs.
Comment corriger l’erreur
- 1.
Créer un fichier des signataires autorisés
Chaque ligne : un ou plusieurs principaux, des options facultatives comme `namespaces="git"`, puis la clé publique. Git compare l’adresse e-mail du committer avec le principal.
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.
Conserver les signataires de l’équipe dans le dépôt
Un fichier relu et versionné dans le dépôt permet à tout le monde (CI comprise) de vérifier le même ensemble de clés ; ses modifications passent par la revue de code.
bash # Team setup: a reviewed allowed_signers file in the repository git config gpg.ssh.allowedSignersFile .github/allowed_signers git log --show-signature -1