El caso de la firma SSH
GPG es potente pero operativamente doloroso. Desde Git 2.34, puedes firmar commits y tags con las llaves SSH que ya usas para hacer push. Sin keyring, sin malabarismos de passphrase, sin red de confianza separada. GitHub, GitLab, Gitea y Forgejo aceptan commits firmados con SSH.
Configuración
git config --global gpg.format ssh
git config --global user.signingkey ~/.ssh/id_ed25519.pub
git config --global commit.gpgsign true
git config --global tag.gpgsign true
Archivo de signers permitidos
cat > ~/.config/git/allowed_signers <<EOF
[email protected] ssh-ed25519 AAAA... alice
[email protected] ssh-ed25519 AAAA... bob
EOF
git config --global gpg.ssh.allowedSignersFile ~/.config/git/allowed_signers
Verificación
git log --show-signature
git verify-commit HEAD
git verify-tag v1.0.0
Llaves respaldadas por hardware
OpenSSH soporta llaves FIDO/U2F (ssh-keygen -t ed25519-sk). Funcionan transparentemente para firmar.
Revocación
git config --global gpg.ssh.revocationFile ~/.config/git/revoked_keys
Errores comunes
Email desajustado entre autor del commit y entrada en signers permitidos. Apuntar user.signingkey a una llave privada; quieres la .pub. Olvidar subir la llave pública a la plataforma host.
Entornos mixtos
Los commits firmados con SSH y con GPG pueden coexistir en un repo. Elige uno para nuevos commits y documenta la política.