Sign git commits with SSH keys

OpenSSH 8.0 or newer is required and Git 2.34.0.

If no key exists yet, it can be created;

ssh-keygen -t ed25519

Today, the RSA is the most widely used public-key algorithm for SSH key. But compared to Ed25519, it's slower and even considered not safe if it's generated with the key smaller than 2048-bit length. If you are using Yubikey make sure you use ed25519-sk.

Create an allowed_signers file. I recommend naming it ~/.ssh/allowed_signers, which will store public keys allowed to sign commits.

The format of the file should be:

email-address key-type publickey

So in my case:

# ~/.ssh/allowed_signers                                    
[email protected] [email protected] AAAAGnNrLXNzaC1lZDI1N [ ... ] vAAAABHNzaDo= wiege@laptop

Now update your settings for the repository

git config gpg.format ssh
git config commit.gpgsign true
git config tag.gpgsign true
git config gpg.ssh.allowedSignersFile "$HOME/.ssh/allowed_signers"
git config user.signingkey "$HOME/.ssh/id_ed25519_sk.pub"
git config user.email [email protected]

If you want it to apply to all commits, use the global flag:

--global