GPG - 非交互式更改口令短语

7

大多数其他的 GPG 命令都允许使用 --batch 模式,但当尝试编辑密码短语时似乎不适用。

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

这会打开一个交互式的 GPG 提示符。

在我的情况下,这种方法行不通,因为我需要在没有命令行交互的情况下更改密码短语。

我找到的最接近的方法是:

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

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

非常感谢任何建议。


看起来你不能这么做。例如,请参考 https://unix.stackexchange.com/questions/278841/centos-change-the-password-of-gpg-file-by-bash-script/278853#278853。 - Alexander Mashin
您无法进行非交互式操作。请参见 https://unix.stackexchange.com/questions/60213/gpg-asks-for-password-even-with-passphrase - Sid110307
1个回答

7

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

需要注意的几点:

  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

只需设置变量即可,就可以正常工作。享受吧!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接