按字符串导入PGP公钥

时间:2016-09-09 12:35:43

标签: shell gpgpu pgp

我想在脚本中将PGP公钥导入我的钥匙串,但我不希望它将内容写入文件。现在我的脚本执行此操作:

curl http://example.com/pgp-public-key -o /tmp/pgp && gpg --import /tmp/gpg

我怎么能写这个脚本所以我可以调用gpg --import并将公钥作为字符串导入?谢谢你的帮助。

3 个答案:

答案 0 :(得分:9)

gpg --import知道两种操作方式:它可以从文件中读取(例如gpg --import key.gpg),或者 - 如果没有传递文件名 - 从STDIN读取。如果没有给出curl参数,-o会将获取的文档打印到STDOUT。将两者放在一起将直接将结果从curl流式传输到gpg --import

curl http://example.com/pgp-public-key | gpg --import

答案 1 :(得分:1)

在bash中,您可以使用:

gpg --import <(curl http://example.com/pgp-public-key)

这称为process substitution

答案 2 :(得分:0)

如果您知道密钥的ID,也可以使用curl从公钥服务器搜索密钥:

curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&options=mr&search=<key-id-here>" | gpg --import -

注意:您必须在密钥ID前加0x

大多数公钥服务器允许您截断密钥ID,因此您无需键入整个密钥ID。例如,以下三个示例将生成完全相同的密钥:

curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&options=mr&search=0x9454C19A66B920C83DDF696E07C8CCAFCE49F8C5" | gpg --import -

curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&options=mr&search=0x07C8CCAFCE49F8C5" | gpg --import -

curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&options=mr&search=0xCE49F8C5" | gpg --import -

大多数密钥服务器也是同步的,因此您不一定需要坚持使用单个密钥服务器。您可以在SKS Keyserver status page上查看其他关键服务器列表和信息。

-fsSL命令中curl的说明:

-f--fail

  

(HTTP)服务器错误无声地失败(根本没有输出)。

-s--silent

  

无声或安静模式。

-S--show-error

  

与-s, - silent一起使用时,如果curl失败,则会使curl显示错误消息。

-L--location

  

(HTTP)如果服务器报告所请求的页面已移动到其他位置(用Location:标题和3XX响应代码表示),则此选项将使curl重做新位置的请求。