gpg 报告“操作已取消”

gpg 报告“操作已取消”

我正在尝试使用 GPG 加密文件。我是 GPG 新手。它安装在 RHEL 7.4 上的版本 2.0.22 上。

每当我尝试运行它时,都会收到一条错误消息,表明该操作已被用户取消。

sh-4.2$ gpg --output ~/test.gpg --symmetric --cipher-algo AES256 test.html
gpg: cancelled by user
gpg: error creating passphrase: Operation cancelled
gpg: symmetric encryption of `test.html' failed: Operation cancelled
sh-4.2$

这个答案我发现这可能是由于 TTY 权限造成的。

GnuPG 尝试确保它直接从终端读取密码,而不是(例如)从标准输入通过管道读取。为此,它会尝试直接打开 tty。不幸的是,文件权限会成为障碍 - tty 设备由您登录的用户拥有。因此只有该用户和 root 可以打开它。 GnuPG 似乎错误地报告了错误,称您已取消(实际上它的权限被拒绝)。

对于我的机器,TTY 由 root 组拥有g+rw,虽然我不是 root,但我位于 root 组中:

sh-4.2$ stat /dev/tty
  File: '/dev/tty'
  Size: 0               Blocks: 0          IO Block: 4096   character special file
Device: 100076h/1048694d        Inode: 221356338   Links: 1     Device type: 5,0
Access: (0666/crw-rw-rw-)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-05-17 14:08:51.809798450 +0100
Modify: 2018-05-17 14:08:51.809798450 +0100
Change: 2018-05-17 14:08:51.809798450 +0100
 Birth: -
sh-4.2$ id -g
0
sh-4.2$

所以这似乎不是问题。不幸的是,我无法测试它是否以 root 身份工作,因为我在这台机器上没有 root 访问权限(尽管我可以请求在机器启动时以 root 身份运行命令,但不能运行守护进程等)。

因为它说操作已被用户取消(这完全是不正确的),我不知道如何调试它。

如果我没有 root 访问权限,这个问题可以解决吗?没有 root 访问权限就无法使用 GPG 吗?

答案1

对我来说,当我从家里连接到办公室计算机并附加到screen之前从办公室打开的会话时,就会发生这种情况。

我的调查表明该错误是由于pinentry无法连接到 d-bus 套接字造成的。其根本原因是DBUS_SESSION_BUS_ADDRESS环境中设置的变量并指向不存在的套接字。当我unset DBUS_SESSION_BUS_ADDRESSdbus-launch gpg <arguments>它工作得很好时。

它还可能有助于通过强制gpg-agent使用来完全禁用 pinentry 的 GUI 输入pinentry-tty。编辑~/.gnupg/gpg-agent.conf并添加一行pinentry-program /usr/bin/pinentry-tty

希望这会有所帮助,或者至少下次发生这种情况时我会自己找到答案而我忘记了解决方案。 :)

相关内容