按字符串导入 PGP public 密钥

Import PGP public key by string

我想在脚本中将 PGP public 密钥导入我的钥匙串,但我不希望它将内容写入文件。现在我的脚本是这样做的:

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

我如何编写此脚本以便我可以调用 gpg --import 并将 public 键作为字符串导入?谢谢你的帮助。

在bash中,您可以使用:

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

这叫做process substitution

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

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

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

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

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

大多数 public 密钥服务器允许您截断密钥 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 查看其他密钥服务器的列表和信息。

curl命令中-fsSL的解释:

-f, --fail:

(HTTP) Fail silently (no output at all) on server errors.

-s, --silent:

Silent or quiet mode.

-S, --show-error:

When used with -s, --silent, it makes curl show an error message if it fails.

-L, --location:

(HTTP) If the server reports that the requested page has moved to a different location (indicated with a Location: header and a 3XX response code), this option will make curl redo the request on the new place.

我们也可以使用 pgp cmd 来实现。例如:

将 PGP public 密钥导入钥匙串(钥匙圈):

pgp --import "F:\file_path\pgp_public_cert\publickey.asc" --public-keyring "F:\FilePath\keychain\pubchain.gpg"

将 PGP 私钥导入钥匙串(keyring):

pgp --import "F:\file_path\pgp_private_cert\privatekey.asc" --private-keyring "F:\FilePath\keychain\secchain.gpg"

这里,

publickey.asc -> 我的 public 键

privatekey.asc -> 我的私钥

pubchain.gpg -> 我的 public keyring/keychain 我存储了我所有的 public 证书或 public键。

secchain.gpg -> 我的私人 keyring/keychain 我存储了我所有的私人证书或私钥。

希望这对某些人也有帮助。