encryption - GPG - 以非交互方式更改密码

标签 encryption keychain gnupg

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

你必须运行 gpg --edit-key user
这会打开一个交互式 GPG 提示。

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

我发现的最接近的东西是
gpg --batch --passphrase-fd 0 --status-fd 2 --command-fd 0 --edit-key
但这只是在我输入现有密码后给我一个无效命令。

任何建议都非常感谢。

最佳答案

我刚刚在编写 key 生成脚本时遇到了这个问题并想出了一个解决方案!
需要注意的几点:

  • 很多人指向--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
    
    只需设置变量就可以了。享受!

    关于encryption - GPG - 以非交互方式更改密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56582016/

    相关文章:

    python gnupg 签名并验证

    objective-c - 使用 KeychainItemWrapper 保存到 iOS 钥匙串(keychain)时出错

    encryption - 加密连接字符串 IIS 7

    java - 通过 URL 编码从 PHP 到 Java 的时间敏感的加密/解密错误

    C# 我如何进行加密?

    ios - "No unexpired provisioning profiles found that contain any of the keychain' s 签名证书”恐怖

    iphone - 钥匙串(keychain)密码陷阱

    PHP gnupg enrypt 有效但不能解密

    git - GitHub GPG key 的公共(public) URL 是什么

    javascript - 在 JavaScript 中重复 php openssl_encrypt