当我运行时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-uids
、show-unusable-subkeys
和show-notations
也show-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'