大多数其他GPG命令允许您使用--batch模式,但是在尝试编辑密码短语时情况并非如此。
您必须运行gpg --edit-key user
这将打开一个交互式GPG提示。
在我的情况下这是行不通的,因为我需要能够在没有命令行交互的情况下更改密码的功能。
我找到的最接近的东西是
gpg --batch --passphrase-fd 0 --status-fd 2 --command-fd 0 --edit-key
但这只是在输入现有密码后给了我一个无效的命令。
任何建议都值得赞赏。
答案 0 :(得分:4)
我刚刚在编写密钥生成脚本时遇到了这个问题,并想出了一个解决方案!
注意事项:
--batch
,因为 --passphrase*
需要它。在这种情况下,我们将使用 STDIN
(由 --command-fd 0
指定),因此希望传递原始输入而不是与 GnuPG 函数混淆。--status-fd 2
对调试很有用,但它不是必需的。也就是说,包括它使我了解到 --change-passphrase
请求两个,而且只有两个条目。--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
只需设置变量即可。享受!