我正在尝试从 GPG2 密钥中提取指纹。然后指纹将被传递pass init $GPG2_FINGERPRINT
给初始化
在下面的示例中,我想要指纹值0126E6FFD15E33B8BCE7B748E79142F98581FC60
。
$ gpg2 --list-signatures
pub rsa2048 2021-10-14 [SCEA]
0126E6FFD15E33B8BCE7B748E79142F98581FC60
uid [ unknown] User 1 (User 1) <[email protected]>
sig 3 E79142F98581FC60 2021-10-14 User 1 (User 1) <[email protected]>
sub rsa2048 2021-10-14 [SEA]
sig E79142F98581FC60 2021-10-14 User 1 (User 1) <[email protected]>
使用--with-colons
子密钥时也会返回指纹。在没有子项信息的情况下如何获得干净的输出?
如果我省略--list-keys
并使用--with-fingerprint
,我会非常接近...期望显示警告:gpg: WARNING: no command supplied. Trying to guess what you mean
。我可以重定向警告以获得干净的输出,但我宁愿使用正确的命令
我还有其他方法可以完成这个任务吗?最终目标是pass
通过脚本设置 GPG 密钥(无用户交互)。
$ gpg2 --with-fingerprint --with-colons ./pubring.kbx
gpg: WARNING: no command supplied. Trying to guess what you mean ...
pub:-:2048:1:E79142F98581FC60:1634220843:::-:
fpr:::::::::0126E6FFD15E33B8BCE7B748E79142F98581FC60:
uid:::::::::User 1 (User 1) <[email protected]>:
sub:-:2048:1:213A9C4C15D3AAA9:1634220843::::
答案1
使用
--with-colons
子密钥时也会返回指纹。
该选项--with-colons
是正确的选择,因为它以机器可解析的格式发出输出。
在没有子项信息的情况下如何获得干净的输出?
我建议将其管道到awk
.的输出--with-colons
是标准化的,每行在字段 1 中具有数据类型。任何具有数据类型 的行都pub
表示公钥(与子密钥相反),后面的行(数据类型fpr
)包含字段 10 中的指纹字符串。
awk
由此,通过扫描以“pub:”开头的行并处理后续行中字段 10 中的指纹,解析输出变得很简单。
例如,这将打印密钥环上的所有公钥指纹:
gpg --with-colons -k | awk -F: '/^pub:.*/ { getline; print $10}'