使用GNU 隐私卫士 (GnuPG):对于某个给定的密钥,例如0xDEADBEEF
,用户如何轻松地仅列出其密钥环中具有已由该密钥签名的 UID 的公钥?
如果您可以指定您的答案是否适用于 GnuPG Modern (2.1.x)、GnuPG Stable (2.0.x) 或 GnuPG Classic (1.4.x),将会很有帮助。
答案1
GnuPG 中没有这样的选项,但您可以使用一个简单的脚本来列出所有匹配的键。与 @grochmal 的脚本相比,读取 GnuPG 的输出格式更快、更稳健,--with-colons
能够以编程方式解析该输出格式。我还限制单个 GnuPG 调用:
#!/bin/sh
keyid=${1:-'0000000000000000'}
gpg --with-colons --fingerprint --list-sigs |
while read line; do
packettype="$(echo "${line}" | cut -d':' -f1)"
case $packettype in
fpr)
fingerprint="$(echo "${line}" | cut -d':' -f10)"
;;
sig)
issuedby="$(echo "${line}" | cut -d':' -f5)"
if [ "x${issuedby}" = "x${keyid}" ]; then
echo "${fingerprint}"
fi
;;
esac
done |
uniq
这依赖于作为第一个参数传递的长密钥 ID,无论如何都不应该使用短密钥 ID。
答案2
据我所知,没有这样的选择。然而,编写一个脚本是很简单的:
#!/bin/sh
KEY=${1:-'C840C4F6'} # that's my key
gpg -k |
grep 'pub ' |
cut -d ' ' -f 4 |
cut -d / -f 2 |
while read x; do
if gpg --list-sigs "$x" | grep C840C4F6 >/dev/null; then
echo "$x"
fi
done
而且,由于 GnuPG 相当快,它的运行速度足够快。拥有超过 300 个密钥,在便宜的 VPS 上运行时间不到一秒。
和-k
都是--list-sigs
非常古老的gpg
选项。我只在 2.0 和 2.1 上对此进行了测试,但我相信它可以在 1.4 上运行。