如何在bash中获取GPG公钥?

时间:2016-09-20 14:12:30

标签: bash

我需要从GPG获取公钥ID。 SO上的所有内容都讨论了导入,导出等。在下面的示例中,我需要获取要在bash脚本中使用的ABCD1234值吗?

$ gpg --list-keys  
/Users/jblow/.gnupg/pubring.gpg  
---------------------------------  
pub   2048R/ABCD1234 2016-09-20
uid       [ultimate] Joe Blow <joe.blow@nowhere.com>
sub   2048R/JDKKHU76 2016-09-20

3 个答案:

答案 0 :(得分:3)

我今天面临同样的要求(提取密钥 ID 以便在 bash 脚本中与重复性一起使用)。

在 gpg 的手册页中我读到:

<块引用>

对于脚本化或其他无人看管的 gpg 使用,请确保使用 机器可解析的接口和 不是供人类直接使用的默认界面。机器可解析的交互 face 提供了一个稳定且文档齐全的 API,独立于 gpg 的区域设置或未来的变化。 要启用此界面,请使用选项 --with-colons 和 --status-fd。对于某些操作, 选项 --command-fd 也可能派上用场。有关详细信息,请参阅此手册页和文件“详细信息” 接口的阳离子。

我设法通过执行以下操作提取了我想要的密钥 ID:

gpg --list-signatures --with-colons | grep 'sig' | grep 'the Name-Real of my key' | head -n 1 | cut -d':' -f5

PS:https://devhints.io/gnupg 有帮助 ;)

答案 1 :(得分:1)

您可以使用grep:

gpg --list-keys | grep pub | grep -o -P '(?<=/)[A-Z0-9]{8}'

输出:

ABCD1234

答案 2 :(得分:1)

awk + bash字符串操作方式。

# 'awk' extracts the '2048R/ABCD1234' part of the command and
# string-manipulation done to strip-off characters up to the trailing '/' character

$ keyVal=$(gpg --list-keys | awk '/pub/{if (length($2) > 0) print $2}'); echo "${keyVal##*/}"
ABCD1234

如果您想提取sub的密钥,只需将awk中的模式更改为

$ keyVal=$(gpg --list-keys | awk '/sub/{if (length($2) > 0) print $2}'); echo "${keyVal##*/}"
JDKKHU76