如何优雅地为 Gitea 设置 GPG Commit Signatures
本文最后更新于:2023年2月20日 中午
前言
本文主要介绍为自建的 Gitea 配置 GPG 自动签名,实现的效果主要是在网页上编辑、merge 等操作的时候会自动签名,详情可以参考 官方文档。具体效果如图所示:
目前在官方文档和 issue 中都没有很详细的操作过程,所以写本文作为记录。
步骤
1. 更新 Gitea
首先务必更新 Gitea 到最新版本。
2. 设置 GNUPGHOME
环境变量(推荐)
由于 Gitea 目前将 ssh 和 gpg 目录移到了配置文件 HOME_PATH
(默认%(APP_DATA_PATH)s/home
)下,为了方便起见,设置 Docker 环境变量GNUPGHOME
为配置文件中的HOME_PATH
,例如:
environment:
- GNUPGHOME=/data/home/.gnupg
3. 生成 GPG 密钥
首先 务必 通过以下命令进入容器中:
docker exec -it --user git gitea bash
其中 gitea
是你的 Docker 容器名。
然后生成 GPG 密钥,参考 此文档。注意:
- 名字和邮箱需要正确设置为 之后用于全局签名 的用户名和邮箱。
- passphrase务必 为空!
生成的后 HOME_PATH
目录(例如/data/home/.gnupg
)应当不为空。
关于 GPG 的一些操作
可以用下面的命令查看目前生成的 GPG 密钥:
gpg --list-keys
gpg --list-secret-keys
可以用下面的命令到处生成的 GPG 的公钥和密钥:
gpg --output public.pgp --armor --export [email protected]
gpg --output private.pgp --armor --export-secret-key [email protected]
可以用下面的命令删除生成的 GPG 的公钥和密钥:
gpg --delete-secret-key [Key_ID]
gpg --delete-key [Key_ID]
4. 编辑 .gitconfig
在[user]
块编辑
name = 之前设置的名称
email = 之前设置的邮件
signingkey = GPG 密钥的 ID
其中 GPG 密钥的 ID 可以用 gpg --list-keys
查看,例如:
中的E75A026468C8A002F1D008E74EE83E7D175FC6A2
。
在 [commit]
块中添加:
gpgsign = true
5. 重启 Gitea
最后重启 Gitea 容器,尝试创建一个新的非空 repo,如果成功且没有 500,即配置成功。
结语
本文目前只是个简单的配置,在官方文档中写道:
It is up to a server administrator to determine how best to install a signing key. Gitea generates all its commits using the server
git
command at present - and therefore the servergpg
will be used for signing (if configured.) Administrators should review best-practices for GPG - in particular it is probably advisable to only install a signing secret subkey without the master signing and certifying secret key.
之后会对本文进行进一步优化,增强安全性。