Gentoo Linux GPG 正确加密通过参数传递的文件,但在从标准输入读取时抛出“不适合设备的 ioctl”

RAK*_*AKK 31 ssh gentoo gpg gpg-agent

我正在使用内核 4.1.7-hardened-r1 运行 Gentoo Hardened,我试图从从 SSH 打开的 shell 会话中使用 GPG 加密文件,并DISPLAY禁用变量以使用 pinentry-curses 作为密码提示。使用gpg -o file.gpg --symmetric file我可以加密就好了。使用pv file | gpg -o file.gpg --symmetric我收到以下错误消息:

gpg-agent[30745]: command get_passphrase failed: Inappropriate ioctl for device
Run Code Online (Sandbox Code Playgroud)

TNW*_*TNW 53

您应该设置您的 GPG_TTY 变量以使其正常工作,如本文档所示

GPG_TTY=$(tty)
export GPG_TTY
Run Code Online (Sandbox Code Playgroud)

这两行应该在你的.bashrc(假设是 bash)中,所以每次你打开新的终端会话时它们都会运行。

不过,还有另一种解决方案:在 bash 中,您可以pv使用进程替换来运行并假装它是一个文件:

gpg -o file.gpg --symmetric <(pv file)
Run Code Online (Sandbox Code Playgroud)

因此,将东西通过管道输送到需要额外输入的程序可能不是一个好主意。它的工作方式可能与预期不同。