我正在尝试获取公钥并将其添加到
/etc/apt/trusted.gpg.d/
,但我遇到了不兼容问题。
我跑步:
gpg --no-default-keyring --keyring /etc/apt/trusted.gpg.d/example.gpg --import file.asc
这有效。
但是当我使用
apt-key list
时,它说密钥不兼容。
查看文件类型,我的
example.gpg
属于 GPG keybox database version 1
类型,而其他 apt 键属于 GPG key public ring
类型。
如何让
gpg
生成 GPG key public ring
而不是 keybox
?
我最近也偶然发现了这个问题,在深入研究源代码后,我找到了几乎完美的解决方案。
您可以仅使用前缀指定密钥环格式,例如
gnupg-ring:
或 gnupg-kbx:
。在你的情况下,命令是:
gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/example.gpg --import file.asc
要使此方法起作用,请禁用 keyboxd 守护进程(自 GnuPG 2.4.1 起在新的 GnuPG 主目录上默认启用);否则,所有公钥都会无条件存储在一个 SQLite 数据库 (
~/.gnupg/public-keys.d/pubring.db
) 中,并且 --no-default-keyring
和 --keyring
参数将被默默忽略:
comment-out `use_keyboxd` in `~/.gnupg/common.conf` if file exists
我知道这已经很旧了,但是由于我花了一些时间寻找解决方案,所以我将分享它。
在自动化方面,GnuPG 一直是一个难题,而且似乎没有办法让它使用旧的密钥环 v4 格式。 但是,可以通过重新导出密钥来完成。这里是一个丑陋的单行,以 MariaDB 存储库为例:
# cd /etc/apt/trusted.gpg.d/ && wget -q -O - https://mariadb.org/mariadb_release_signing_key.asc | \
gpg --no-default-keyring --keyring=$(pwd)/mariadb.gpg --batch --import - && \
gpg --no-default-keyring --keyring=$(pwd)/mariadb.gpg --batch --output $(pwd)/mariadb.gpg~ --export --yes && \
mv $(pwd)/mariadb.gpg~ $(pwd)/mariadb.gpg; chmod 644 $(pwd)/mariadb.gpg
使用
apt-key
及其 --keyring
选项可以更轻松地完成此操作(在 Debian Buster 10.7 上测试)。
$ wget -q -O - https://mariadb.org/mariadb_release_signing_key.asc | \
sudo apt-key --keyring /etc/apt/trusted.gpg.d/mariadb.gpg add -
如果您查看
apt-key
脚本,您会发现类似于上面一行的内容(但可能更强大)。
请注意,如果您对受信任文件使用后缀 apt-key
而不是 .asc
,则 .gpg
将会抱怨并失败。这似乎是一个错误,可以通过文件上的先前 touch
来避免。