对于较新版本的 gngpg 版本2.2.8以上:

对于较新版本的 gngpg 版本2.2.8以上:

当我运行时gpg --with-fingerprints --with-colons keyfile.key,我在 stdout 上得到一个机器可解析的输出,其中包含密钥文件内密钥的密钥指纹(这正是我想要的),以及 stderr 上的以下错误:

gpg: WARNING: no command supplied.  Trying to guess what you mean ...

所以 GnuPG 正确地猜测了命令,但我一生都无法弄清楚它猜测的命令是什么。我已经尝试了手册页上列出的几乎所有命令。我正在使用 GnuPG 2.2。

有谁知道读取密钥文件并显示有关密钥的信息的正确命令?


编辑:理想情况下,该机制能够从标准输入读取密钥文件,例如

cat keyfile.key | gpg --some-command

我应该早先提到这一点,但 gpg 的许多命令都与 stdin 一起使用,我什至没有认为它是一个相关的约束。

答案1

邮件列表中的好心人[email protected]给出了答案:

对于版本 >= 2.1.23:

cat keyfile.key | gpg --with-colons --import-options show-only --import

对于版本 >= 2.1.13 但 < 2.1.23:

cat keyfile.key | gpg --with-colons --import-options import-show --dry-run --import

答案2

对于较新的版本:

gpg --show-keys my-local-key.asc

手册页

--show-keys

    此命令将 OpenPGP 密钥作为输入,并以与命令对本地存储的密钥相同的方式打印有关它们的信息--list-keys。此外,列表选项show-unusable-uidsshow-unusable-subkeysshow-notationsshow-policy-urls已启用。与自动处理一样,此命令应与选项结合使用--with-colons.

答案3

GnuPG 不知道用于列出密钥文件内容的专用命令。要么使用gpg --list-packets <keyfile>(但这不是稳定的、机器可读的输出),要么将密钥文件定义为密钥环和列表密钥。 GnuPG 2.0 之前的旧密钥环格式将密钥存储为密钥数据包的串联;因此您还可以使用密钥文件作为密钥环。至少 GnuPG 2.1 和 2.2 仍然支持旧的密钥环格式,并且我不希望这种情况在不久的将来发生改变。

gpg --with-fingerprint --with-colons --no-default-keyring --keyring <keyfile> --list-keys

请务必包含--no-default-keyring,否则 GnuPG 还将打印用户密钥环中的所有密钥!

答案4

对于较新版本的 gngpg 版本2.2.8以上:

如果您只对以下内容感兴趣短的或者长的钥匙的指纹 无需将 stderr 重定向到 stdout 2>&1:(
即当您有脚本在继续操作之前验证指纹时,就像 ansible 或其他配置管理工具一样)


我提供了一种使用--with-colons和一种不使用的方法,具体取决于您的脚本偏好。下面的命令是有目的的不要将密钥导入到您的密钥环中,因为这些是在执行此操作之前验证指纹的可编写脚本的方法。

获取短格式密钥 ID 的方法

短密钥 ID 格式(使用--show-keys--with-colons):

gpg --show-keys --with-colons keyfile.key | awk -F':' '$1=="pub"{print $5}'

短密钥 ID 格式(使用--list-packets):

gpg --list-packets keyfile.key | awk '$1=="keyid:"{print$2}'

获取长格式密钥 ID 的方法

长密钥 ID 格式(using --show-keys--with-colons):

gpg --show-keys --with-colons keyfile.key | awk -F':' '$1=="fpr"{print $10}'

长密钥 ID 格式(使用--show-keys):

gpg --show-keys keyfile.key | sed -nr 's/^([ ]+)([0-9A-Z]{40}$)/\2/p'

相关内容