我需要从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
答案 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