Mensaje de error
error: gpg.ssh.allowedSignersFile needs to be configured and exist for ssh signature verification
También se muestra como
- fatal: either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured
`git log --show-signature` imprime la misma línea y después «No signature» para el commit, lo que hace pensar que el commit no está firmado; no es así.
Qué significa
El commit lleva una firma SSH (`gpg.format ssh`), y Git verifica ese tipo de firmas con `ssh-keygen -Y verify` contra un archivo de firmantes permitidos («allowed signers») que asocia identidades (correos electrónicos) con claves públicas de confianza. No hay ningún archivo así configurado, de modo que Git no puede decidir si la firma procede de alguien en quien confías y devuelve un error en lugar de un veredicto. Puede que la firma en sí sea perfectamente válida. En el lado de la firma, «either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured» indica la carencia de configuración equivalente.
Por qué ocurre
Firma SSH configurada, verificación sin configurar
frecuenteLas guías de firma de commits con SSH suelen quedarse en `gpg.format ssh` y `user.signingkey`. La firma funciona; la verificación necesita además `gpg.ssh.allowedSignersFile`.
El archivo configurado no existe
ocasionalUna ruta de un repositorio de dotfiles que no existe en este equipo, o un `~` que no se expandió donde se escribió la configuración.
Verificación en CI sin el archivo de firmantes
ocasionalLos scripts de protección de ramas o de publicación de versiones que ejecutan `git verify-commit` necesitan el archivo de firmantes permitidos en el propio trabajo de CI, no solo en los equipos de los desarrolladores.
Cómo solucionarlo
- 1.
Crear un archivo de firmantes permitidos
Cada línea: principal(es), opciones facultativas como `namespaces="git"` y, por último, la clave pública. Git compara el correo electrónico del committer con el 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.
Guardar los firmantes del equipo en el repositorio
Un archivo revisado en el repositorio permite que todos (incluida la CI) verifiquen el mismo conjunto de claves; sus cambios pasan por la revisión de código.
bash # Team setup: a reviewed allowed_signers file in the repository git config gpg.ssh.allowedSignersFile .github/allowed_signers git log --show-signature -1