objectif
Signer automatiquement vos commits et tags avec une clé SSH (ed25519), puis vérifier les signatures localement et sur une forge (ex: git.data.pm).
code minimal
# activer la signature SSH globale
git config --global gpg.format ssh
git config --global user.signingKey ~/.ssh/id_ed25519.pub
git config --global commit.gpgsign true
utilisation
# 1) si besoin, générer une clé (ed25519) identifiée
ssh-keygen -t ed25519 -a 100 -C "dev@data.pm" -f ~/.ssh/id_ed25519
# 2) activer la signature SSH et la clé publique comme clé de signature
git config --global gpg.format ssh
git config --global user.signingKey ~/.ssh/id_ed25519.pub
git config --global commit.gpgsign true
# 3) signer un commit (automatique grâce à commit.gpgsign)
git commit -m "feat: activer la signature SSH"
# 4) vérifier une signature de commit
git log --show-signature -1
# 5) signer un tag annoté et vérifier
git tag -s v1.2.3 -m "v1.2.3"
git tag -v v1.2.3
variante(s) utile(s)
# fichier des signataires autorisés (pour vérifier les signatures des autres)
install -d -m 0700 ~/.config/git
printf 'dev@data.pm %s\n' "$(cat ~/.ssh/id_ed25519.pub)" > ~/.config/git/allowed_signers
chmod 0600 ~/.config/git/allowed_signers
git config --global gpg.ssh.allowedSignersFile ~/.config/git/allowed_signers
# ajouter plusieurs signataires (ex: CI et devs)
{
printf 'ci@data.pm %s\n' "$(cat /etc/ci/ssh_ci_ed25519.pub 2>/dev/null || true)"
printf 'alice@data.pm %s\n' "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA...alice"
printf 'bob@data.pm %s\n' "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA...bob"
} >> ~/.config/git/allowed_signers
# forcer la signature dans un repo spécifique (sans touche globale)
git config gpg.format ssh
git config user.signingKey ~/.ssh/id_ed25519.pub
git config commit.gpgsign true
# verifier toutes les signatures d'un range de commits
git log --show-signature origin/main..HEAD
# changer de clé (rotation)
git config --global user.signingKey ~/.ssh/id_ed25519_rotated.pub
notes
- nécessite Git ≥ 2.34 pour
gpg.format ssh. La clé publique (~/.ssh/id_ed25519.pub) sert d’identifiant. commit.gpgsign=truesigne tous les commits; désactivez ponctuellement avec--no-gpg-sign.allowedSignersFilemappe des “principals” (ex: emailsdev@data.pm) à des clés publiques; Git l’utilise pour vérifier.- publiez la clé publique dans votre compte forge (ex: git.data.pm) pour obtenir l’icône “verified” côté serveur.