禁止 GPG 命令中的密码提示

Suppress the passphrase prompt in GPG command

编辑后的版本

我有一个关于 GPG 的问题,但是我写了所有的过程,也许它会对某人有所帮助。

我想:在 GPG 命令中抑制密码提示。我不想:使用 -c 选项(--symmetric)。

我有 2 个系统 Linux 和 Windows。我想将数据从 Linux 发送到 Windows。我想在 Linux 中加密数据并在 Windows 中解密。

我在两者上都安装了 GPG 并执行了以下步骤:

  1. Windows中生成一对密钥:

    gpg --gen-key
    
  2. 更改Windows中的关键参数:

    gpg --edit-key my@Email.com
    
    trust
    5
    expire
    0
    
  3. 导出 public 个键:

    gpg -a --export my@Email.com > public.key
    
  4. 将public密钥发送到Linux机器。

  5. 在 Linux 中导入 public 密钥。

    gpg --import public.key
    
  6. 更改Linux

    中的信任参数
    gpg --edit-key my@Email.com
    
    trust
    5
    
  7. 加密文件 Linux

    gpg --output output.enc --encrypt --recipient my@Email.com myFileOnLinux.txt
    
  8. 发送加密文件到Windows.

  9. 解密文件。

    gpg --batch --passphrase "myPasswordPhrase" -d -o test.dec output.enc
    

在 Windows 中弹出 window 它再次询问我 Passphrase。我怎样才能避免它?

经过大量挖掘,我发现这个命令禁用了 windows 上的输入提示(也适用于 *nix 系统):

--pinentry-mode=loopback

完整的命令是:

gpg --pinentry-mode=loopback --passphrase  "PASSWORD" -d -o "PATH\TO\OUTPUT" "PATH\TO\FILE.gpg"
gpg --batch --import sec.key
gpg -d --batch --passphrase mypassphrase encrypted_file.gpg

--batch 标志在导入密钥和解密文件时抑制密码提示。

如果你想使用对称密钥(-c 选项)那么你只需要添加 --quiet--batch 标志。

这是一个完整的工作示例:

gpg --symmetric --cipher-algo AES256 --passphrase mySuperCoolPassphrase --quiet file_to_encrypt.tftpl

github 也有一个工作示例,他们用它来在自动化中解密文件 https://docs.github.com/en/actions/security-guides/encrypted-secrets#limits-for-secrets

UPDATE

gpg 解密存在一个问题,这让我在生产中使用它时三思而后行。 (基本上它会无限期地挂起,除非你手动修改它)所以我决定使用 https://github.com/FiloSottile/age,因为它使用简单,评价很高,而且看起来非常可靠