以非交互方式延长 GPG 密钥的到期日期

以非交互方式延长 GPG 密钥的到期日期

我需要延长 GPG 密钥的到期日期,但我能找到的所有答案或文章都是以交互方式进行的,例如例子。我需要将逻辑嵌入到 shell 脚本中,因此想知道如何以非交互方式执行此操作?

答案1

假设您有密钥[email protected],并且该密钥的密码存储在文件中passphrase.txt,以下命令将以非交互方式更改到期日期:

printf "expire\n10w\nsave\n" | gpg --batch --pinentry-mode loopback --passphrase-fd 3 --command-fd 0 --status-fd=2 --edit-key [email protected] 3<passphrase.txt

(如果它由于 pinentry 调用而不起作用,请参阅下面的注释。)

命令简要说明:

  • printf "expire\n10w\nsave\n"将这些命令发送到 gpg。expire更改密钥的到期日期,很明显10w是 10 周save
  • --batch表示无需用户输入
  • --pinentry-mode loopback允许将密码文件通过管道传输到 gpg(见下文)
  • --passphrase-fd 3说文件描述符3是 gpg 应该寻找密码的地方(注意3<passphrase.txt命令的末尾。
  • --command-fd 0表示文件描述符0(或 STDIN)是 gpg 应该--batch从中获取命令的地方(printf命令开头的部分)。
  • --status-fd 2表示状态变为2(或 STDOUT),您可能希望将其直接记录下来。
  • --edit-key [email protected]是我们想要编辑的关键

这个答案应该能让你很好地了解如何使用 gpg 来“自动化”事情。为了完成这个,你可能想要更改加密子密钥的到期时间等。

注意:当前版本的 GnuPG 不允许轻松地将密码通过管道传输(它们默认为 gpg-agent 和名为 的程序pinentry)。为了简单起见,我通过添加allow-loopback-pinentry到我的来启用管道密码gpg-agent.conf。请注意,这并不安全,您可能希望实现自己的密码pinentry(或使用适合您的非交互式工作流程的现有密码),然后将其设置为gpg-agent.conf

相关内容