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
Assinatura SSH ativada, verificação nunca configurada
comumOs guias de assinatura de commits com SSH costumam parar em `gpg.format ssh` e `user.signingkey`. A assinatura funciona; a verificação também precisa de `gpg.ssh.allowedSignersFile`.
O arquivo configurado não existe
ocasionalUm caminho vindo de um repositório de dotfiles que não existe nesta máquina, ou um `~` que não foi expandido no lugar onde a configuração foi escrita.
Verificação no CI sem o arquivo de signatários
ocasionalScripts de proteção de branch ou de release que executam `git verify-commit` precisam do arquivo de signatários permitidos no job, e não só nas máquinas dos desenvolvedores.
Como corrigir
- 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.
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