GPG密钥是否存在于列表中?

14

我想创建一个shell脚本,但以前没有接触过。有一个gpg命令:

gpg --keyserver SERVER --recv-keys  KEY

问题是,如果密钥已经被添加,我不想运行此命令。有没有方法可以检查密钥是否存在于密钥列表中?谢谢!


1
gpg -k 有什么问题吗? - Markus W Mahlberg
你的意思是:gpg -k | grep KEY 吗? - LosYear
1
这会是个好主意,不是吗? - Markus W Mahlberg
我认为会有更优雅的方式 :-) - LosYear
为什么要这样做呢?检查所述操作的返回值是否为空(或者,如果您不需要该键,则grep是否返回非零退出代码),然后仅在此时执行gpg密钥的加载。在我看来,当bash脚本在执行和编程时间上都能够最有效地完成其工作时,它们是最优雅的。 - Markus W Mahlberg
"gpg -k" 不会检查系统中的所有密钥。 - Jahid
3个回答

15

运行gpg --list-keys [key-id]命令(或简写命令-k),如果存在匹配的密钥则返回代码0(成功),否则返回其他代码(失败)。不要像评论中其他人建议的那样列出所有密钥,然后再使用grep命令进行过滤,这将会在密钥环中包含大量密钥时变得极慢。运行命令。

gpg --list-keys [key-id] || gpg --keyserver [server] --recv-keys [key-id]

为了获取丢失的密钥,可能需要丢弃第一个gpg命令的输出(gpg --list-keys [key-id] > /dev/null 2>&1 || ...),因为你只关心返回码。

请注意:


"gpg --list-keys" 不会列出所有的密钥。 - Jahid
1
gpg --list-keys 列出当前使用的密钥环中所有可用的密钥。 如果密钥在其他任何密钥环中,这对你使用它没有帮助。 apt-key list 仅列出apt软件包管理器密钥环中的密钥 - 这似乎不是OP尝试做的事情。 - Jens Erat

1

你可以做:

[[ $(gpg --list-keys | grep -w KEY) ]] && echo "Key exists" ||
gpg --keyserver SERVER --recv-keys  KEY

附加内容(适用于apt密钥环):

[[ $(apt-key list | grep -w KEY) ]] && echo "Key exists" ||
gpg --keyserver SERVER --recv-keys  KEY

如果apt-key可用

1
请注意,apt-key仅适用于apt软件包管理器的密钥环,而不是用户的密钥环。这很可能不是OP想要做的事情。 - Jens Erat
@JensErat,看来我误解了OP的意图。gpg --list-keys是正确的方法。 - Jahid
几年后,apt-key已被弃用。https://manpages.ubuntu.com/manpages/impish/man8/apt-key.8.html - Ondřej Kolín

0

正确的做法是运行以下命令

gpg --keyserver hkp://keyserver.ubuntu.com -k [your-key-id]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接