GPG-非交互式更改密码

时间:2019-06-13 13:49:04

标签: keychain gnupg

大多数其他GPG命令允许您使用--batch模式,但是在尝试编辑密码短语时情况并非如此。

您必须运行gpg --edit-key user

这将打开一个交互式GPG提示。

在我的情况下这是行不通的,因为我需要能够在没有命令行交互的情况下更改密码的功能。

我找到的最接近的东西是

gpg --batch --passphrase-fd 0 --status-fd 2 --command-fd 0 --edit-key

但这只是在输入现有密码后给了我一个无效的命令。

任何建议都值得赞赏。

1 个答案:

答案 0 :(得分:4)

我刚刚在编写密钥生成脚本时遇到了这个问题,并想出了一个解决方案!

注意事项:

  1. 很多人都指向 --batch,因为 --passphrase* 需要它。在这种情况下,我们将使用 STDIN(由 --command-fd 0 指定),因此希望传递原始输入而不是与 GnuPG 函数混淆。
  2. 虽然 --status-fd 2 对调试很有用,但它不是必需的。也就是说,包括它使我了解到 --change-passphrase 请求两个,而且只有两个条目。
  3. 设置 --pinentry-mode loopback 以避免提示要求您输入密码。

解决方案是将原始密码和新密码通过管道传输(或重定向)到 STDIN,GnuPG 可以在其中处理它们。虽然我的初始代码使用 (echo ..;echo ..)|gpg ..,但最好使用 here-document

# Using GnuPG to change PGP key passphrase non-interactively
gpg --command-fd 0 --pinentry-mode loopback \
    --change-passphrase ${KEYID} <<END
${OLD_PASS}
${NEW_PASS}
END

只需设置变量即可。享受!