我正在使用cryptsetup
分离的标头。为此,我使用--header
参数来指定头文件。我可以使用以下方式打开我的设备:
cryptsetup luksOpen /dev/sdb1 sdb1 --header LUKS-HEADER
但我需要提供标头,而不是作为文件,而是作为另一个命令的输出(我cat
在这里使用命令进行说明)
cryptsetup luksOpen /dev/sdb1 sdb1 --header <(cat LUKS-HEADER)
但这不起作用。我收到以下错误:
Attaching loopback device failed (loop device with autoclear flag is required).
这很令人困惑,因为类似的方法适用于提供密钥,即
cryptsetup luksOpen /dev/sdb1 sdb1 --header LUKS-HEADER --key-file <(printf asdf)
上面的命令工作正常(我使用“asdf”作为示例密码)。
如何--header
从管道/另一个进程向选项提供参数?
赏金更新:
接受的答案有效,即我可以使用:
cat LUKS-HEADER > /dev/ram0
cryptsetup luksDump /dev/ram0
但是,我需要一个如何使用进程替换的解决方案,即。目前,进程替换不起作用:
cryptsetup luksDump <(cat LUKS-HEADER)
它给出了错误:
Attaching loopback device failed (loop device with autoclear flag is required).
答案1
似乎 cryptsetup 要求 LUKS 标头是常规文件或设备。如果您需要提供 LUKS 标头作为进程/流的输出,您可以通过将其发送到/dev/ram
cat LUKS-HEADER > /dev/ram0
(前提是你的内核支持ramdisk)
然后您可以简单地使用 cryptsetup 命令:
cryptsetup luksOpen /dev/sdb1 sdb1 --header /dev/ram0
请记住,LUKS 标头将保留在/dev/ram0
磁盘中,直到您释放空间。要释放内存,可以使用以下blockdev
命令:
blockdev -v --flushbufs /dev/ram0
答案2
答案3
要修复仅打开 LUKS 设备时出现的错误“附加环回设备失败(需要具有自动清除标志的环回设备)”,只需运行sudo modprobe loop
.
看起来最新的 Linux 内核 (5.3.13) 中不再默认加载“loop”模块。
答案4
我认为无论你在做什么,<(cat HEADER)
实际上并没有按照你的想法去做。我相信这一点的原因如下:
luksOpen <device> <name> (old syntax)
打开 LUKS 设备
device
并设置映射name
成功验证所提供的密码后。如果未通过 提供密码--key-file
,则该命令交互式提示。环回设备使用注意事项
Cryptsetup 通常直接在块设备上使用(磁盘分区或 LVM 卷)。但是,如果设备参数是一个文件,
cryptsetup
则尝试分配一个环回设备并将其映射到该文件中。此模式需要 Linux 内核 2.6.25 或更高版本,支持循环自动清除标志(循环设备在上次关闭时自动清除)。当然,您始终可以手动将文件映射到循环设备。
不知何故,你似乎生成了比你打算做的更多的参数,或者更少,因为,看起来,cryptsetup
以某种方式将你的设备参数作为一个文件而不是作为块设备,因此尝试通过环回安装它。