docs(git): add SSH commit signing recipe

This commit is contained in:
2026-06-28 12:32:55 -03:00
parent a890525c3e
commit 229e183ec3
+151
View File
@@ -0,0 +1,151 @@
# Configure SSH Commit Signing
This recipe configures Git to sign every commit using an SSH key.
## Requirements
* Git 2.34+
* OpenSSH
* Existing ED25519 SSH key
## Configure Git
```bash
git config --global gpg.format ssh
git config --global commit.gpgsign true
git config --global user.signingkey ~/.ssh/id_ed25519.pub
```
Replace `id_ed25519.pub` with your public signing key if necessary.
## Configure Allowed Signers
Create the directory.
```bash
mkdir -p ~/.config/git
```
Create the file.
```text
~/.config/git/allowed_signers
```
Example:
```text
jotaodiceu@odinetwork.com.br ssh-ed25519 ABCDEfghijk012345...
```
Configure Git.
```bash
git config --global gpg.ssh.allowedSignersFile ~/.config/git/allowed_signers
```
## Verify Configuration
```bash
git config --global --list | grep signing
git config --global --list | grep gpg
```
## Test
Create an empty commit.
```bash
git commit --allow-empty -m "Test signed commit"
```
Verify the signature.
```bash
git log --show-signature -1
```
Expected output:
```text
Good "git" signature for ...
```
# Known Issues
## error: No private key found
Example:
```text
No private key found for ...
```
Possible causes:
* wrong `user.signingkey`
* missing private key
* unsupported private key format
Verify:
```bash
ssh-keygen -y -f ~/.ssh/id_ed25519
```
## error in libcrypto: unsupported
Example:
```text
Load key "...": error in libcrypto: unsupported
```
Cause:
The private key was saved with CRLF line endings.
Verify:
```bash
cat -A ~/.ssh/id_ed25519 | head
```
If lines end with `^M`, convert the file.
```bash
dos2unix ~/.ssh/id_ed25519
```
## Repository rejects unsigned commits
Check whether commit signing is enabled.
```bash
git config --global commit.gpgsign
```
Expected:
```text
true
```
## Gitea does not show "Verified"
Verify that:
* the public key was added as a Signing Key;
* the commit email matches the Gitea account;
* the commit was created after signing was configured.
## Verify Everything
```bash
git config --list --show-origin
git log --show-signature -1
ssh-keygen -y -f ~/.ssh/id_ed25519
```