Pular para o conteúdo
ecdsa.com
Git (verify-commit, log --show-signature, merge --verify-signatures) with gpg.format=sshGit

Mensagem de erro

error: gpg.ssh.allowedSignersFile needs to be configured and exist for ssh signature verification

Também aparece como

  • fatal: either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured

O `git log --show-signature` imprime a mesma linha e depois “No signature” para o commit, o que dá a impressão de que o commit não está assinado — mas ele está.

O que significa

O commit traz uma assinatura SSH (`gpg.format ssh`), e o Git verifica esse tipo de assinatura com `ssh-keygen -Y verify` usando um arquivo de signatários permitidos (“allowed signers”) que associa identidades (e-mails) a chaves públicas confiáveis. Nenhum arquivo desse tipo está configurado, então o Git não consegue decidir se a assinatura vem de alguém em quem você confia e retorna um erro em vez de um veredito. A assinatura em si pode ser perfeitamente válida. Do lado de quem assina, “either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured” é a lacuna de configuração equivalente.

Por que acontece

Como corrigir

  1. 1.

    Criar um arquivo de signatários permitidos

    Cada linha traz o principal (um ou mais), opções facultativas como `namespaces="git"` e, por fim, a chave pública. O Git compara o e-mail do committer com o 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.

    Manter os signatários da equipe no repositório

    Um arquivo revisado no repositório permite que todos (inclusive o CI) verifiquem o mesmo conjunto de chaves; as alterações nele passam por revisão 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

Erros relacionados

Ver toda a base de erros de assinatura