Cryptsetup:无法连接环回设备

Mar*_*ter 5 pipe process-substitution loop-device cryptsetup

我正在使用cryptsetup分离的标头。为此,我使用--header 参数来指定头文件。我可以使用以下方式打开我的设备:

cryptsetup luksOpen /dev/sdb1 sdb1 --header LUKS-HEADER
Run Code Online (Sandbox Code Playgroud)

但我需要提供标头,而不是作为文件,而是作为另一个命令的输出(我cat在这里使用命令进行说明)

cryptsetup luksOpen /dev/sdb1 sdb1 --header <(cat LUKS-HEADER)
Run Code Online (Sandbox Code Playgroud)

但这不起作用。我收到以下错误:

Attaching loopback device failed (loop device with autoclear flag is required).
Run Code Online (Sandbox Code Playgroud)

这很令人困惑,因为类似的方法适用于提供密钥,即

cryptsetup luksOpen /dev/sdb1 sdb1 --header LUKS-HEADER --key-file <(printf asdf)
Run Code Online (Sandbox Code Playgroud)

上面的命令工作正常(我使用“asdf”作为示例密码)。

如何--header从管道/另一个进程向选项提供参数?

赏金更新:

接受的答案有效,即我可以使用:

cat LUKS-HEADER > /dev/ram0
cryptsetup luksDump /dev/ram0
Run Code Online (Sandbox Code Playgroud)

但是,我需要一个如何使用进程替换的解决方案,即。目前,进程替换不起作用:

cryptsetup luksDump <(cat LUKS-HEADER)
Run Code Online (Sandbox Code Playgroud)

它给出了错误:

Attaching loopback device failed (loop device with autoclear flag is required).
Run Code Online (Sandbox Code Playgroud)

mik*_*erv -1

我认为无论你在做什么,<(cat HEADER)实际上并没有按照你的想法去做。我相信这一点的原因如下:

luksOpen <device> <name> (old syntax)
Run Code Online (Sandbox Code Playgroud)

成功验证提供的密码后,打开 LUKS 设备device并设置映射。name如果未通过 提供密码--key-file,该命令会以交互方式提示输入

环回设备使用注意事项

Cryptsetup 通常直接在块设备(磁盘分区或 LVM 卷)上使用。但是,如果设备参数是一个文件,cryptsetup则尝试分配一个环回设备并将其映射到该文件中。此模式需要 Linux 内核 2.6.25 或更高版本,支持循环自动清除标志(循环设备在上次关闭时自动清除)。当然,您始终可以手动将文件映射到循环设备。

不知何故,似乎您生成的参数比您打算生成的参数多,或者比您打算生成的参数少,因为,看起来,是以某种方式将您的设备参数cryptsetup关联为文件而不是块设备,因此尝试挂载它通过环回。