Saltar al contenido
ecdsa.com
Git (verify-commit, log --show-signature, merge --verify-signatures) with gpg.format=sshGit

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

Cómo solucionarlo

  1. 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. 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

Errores relacionados

Explorar toda la base de datos de errores de firma