无法从标准输入解密:“公钥解密失败:设备的 ioctl 不合适”

无法从标准输入解密:“公钥解密失败:设备的 ioctl 不合适”

如果我执行,gpg foo.gpg会出现如下对话框:

   ┌────────────────────────────────────────────────────────────────┐
   │ Please enter the passphrase to unlock the OpenPGP secret key:  │
   │ "Edward A. Falk <[email protected]>"                              │
   │ 1024-bit ELG key, ID xxxxxxxxxxxxxxxx,                         │
   │                                                                │
   │                                                                │
   │ Passphrase: __________________________________________________ │
   │                                                                │
   │         <OK>                                    <Cancel>       │
   └────────────────────────────────────────────────────────────────┘

一切正常。

如果我这样做cat foo.gpg | gpg,我就会得到

gpg: public key decryption failed: Inappropriate ioctl for device

我试过了--passphrase-fd 0,但--batch --pinentry-mode loopback无济于事。我通过在命令行上输入密码就可以让它工作,但如果可以的话我真的想避免这种情况。

我怀疑这与 pinentry 代理有某种关系,但我真的不明白如何控制该代理。(我真的不知道为什么 gpg 甚至需要一个。)

我正在使用 gpg 2.2.26。


稍微解释一下:我的 stdin 并非真正来自“cat foo.gpg”;它实际上更接近于aws s3 cp "s3://myawsbucket.tar.gz.gpg" -命名存储桶的位置,比我想存储在本地机器上的存储桶大得多,这样我就可以解密它并从中提取一个文件。

答案1

我弄清楚了我需要做哪些不同的事情。事实证明,如果 gpg-agent 正在运行并正确配置,一切都会正常进行。gpg-agent 知道如何与用户交互以获取密码。有关更多信息,请参阅 gpg-agent 手册页。

相关内容