如果我执行,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 手册页。