使用管道的 gpg 对称加密

Tho*_*mas 4 encryption gentoo command-line pipe gnupg

我正在尝试通过从中提取数据/dev/random然后使用 GPG 对其进行加密来生成密钥来锁定我的驱动器(使用 DM-Crypt 和 LUKS)。

在我使用的指南中,它建议使用以下命令:

dd if=/dev/random count=1 | gpg --symmetric -a >./[drive]_key.gpg
Run Code Online (Sandbox Code Playgroud)

如果您在没有管道的情况下执行此操作,并为其提供一个文件,它会弹出一个 (n?)curses 提示,让您输入密码。但是,当我输入数据时,它会重复以下消息四次并冻结在那里:

pinentry-curses: no LC_CTYPE known assuming UTF-8
Run Code Online (Sandbox Code Playgroud)

它还说can't connect to '/root/.gnupg/S.gpg-agent': File or directory doesn't exist,但是我假设这与它没有任何关系,因为即使输入来自文件它也会显示出来。

所以我想我的问题归结为:有没有办法强制 gpg 从命令行接受密码,或者以其他方式让它工作,或者我是否必须将数据写入/dev/random临时文件,然后加密那个文件?(据我所知,这应该没问题,因为我在 LiveCD 上执行此操作并且尚未创建交换,因此应该无法将其写入磁盘。)

ser*_*aut 12

确保您拥有 tty:

# ls -l $(tty)
crw--w----. 1 foo tty 136, 0 Mar  1 16:53 /dev/pts/0
# chown root $(tty)
Run Code Online (Sandbox Code Playgroud)

设置 GPG_TTY:

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

gpg/pinentry 应该在这些步骤之后工作。