【问题标题】:GPG key exists in the list?GPG 密钥是否存在于列表中?
【发布时间】:2015-05-01 11:57:12
【问题描述】:

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

gpg --keyserver SERVER --recv-keys  KEY

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

【问题讨论】:

  • gpg -k 有什么问题吗?
  • 你的意思是:gpg -k | grep 键?
  • 会是一个想法,不是吗?
  • 我认为会有更优雅的方式:-)
  • 为什么要这样?检查所述操作的返回值是否为空(或者,如果您不需要密钥,则 grep 是否返回非零退出代码),然后才执行 gpg 密钥的加载。恕我直言,当 bash 脚本在执行和编程时间上最有效地完成工作时,它们是最优雅的。

标签: bash shell gnupg


【解决方案1】:

运行gpg --list-keys [key-id](或缩写命令-k),如果匹配键存在,则返回代码为0(成功),否则返回代码为其他值(失败)。不要按照 cmets 中其他人的建议列出所有密钥和 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 没有列出所有键。
  • gpg --list-keys 列出了当前使用的密钥环中的所有可用密钥。如果密钥位于其他任何密钥环中,这将无助于您使用它。 apt-key list 只会列出 apt 包管理器的密钥环中的密钥——这似乎不是 OP 想要做的。
【解决方案2】:

你可以这样做:

[[ $(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 可用

【讨论】:

  • 请注意,apt-key 仅适用于 apt 包管理器的密钥环,而不是用户的密钥环。这很可能不是 OP 打算做的。
  • @JensErat,看来我误解了 OP 的意图。 gpg --list-keys 是要走的路
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 2012-04-16
    • 2011-06-05
    • 2018-04-20
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多