一个相关的问题是:除非提供 --key-file 参数,否则 luksOpen 不会使用密钥文件解密
然而,在 Ubuntu bionic 上cryptsetup 2.0.2
,我确实遇到了以下问题:
当使用文件中包含的密码打开 luks 加密设备时效果很好直接调用:
cat mypass.txt | sudo cryptsetup open --type luks /dev/sda1 enc-store
尝试使用记录的--key-file=-
论点,其中应该导致相同的行为
cat mypass.txt | sudo cryptsetup open --type luks --key-file=- /dev/sda1 enc-store
只是产生延迟消息
此密码没有可用的密钥。
当尝试使用cryptdisks_start enc-store
依赖于该选项的脚本时,这尤其是一个问题,--key-file=-
该选项会三次生成上述消息
这让生活变得不那么愉快了。
我在这里错过了什么吗?
-谢谢!
答案1
这两个命令之间存在差异,如中所述man cryptsetup
:
--key-file, -d name
从文件中读取密码。如果给定的名称是“-”,则将从标准输入读取密码。在这种情况下,读取不会在换行符处停止。
echo
这意味着如果您使用、或复制/粘贴生成文件vi
,它很可能在末尾包含换行符。如果用作纯标准输入(无--key-file
选项),它将忽略其最后的换行符,但是当用作 的参数时--key-file
,即使它是相同的标准输入(--key-file=-
),它也会在密码中包含此换行符:它成为一个新的密码是无效的。
要验证这一点:
cat mypass.txt | tr -d '\r\n' | sudo cryptsetup open --type luks --key-file=- /dev/sda1 enc-store
应该按预期工作(以防万一我也删除任何 CR)。
如果这是原因,只需删除此换行符:例如
mv -i mypass.txt mypass.old && tr -d '\r\n' < mypass.old > mypass.txt
无论如何,您可能应该做的是从纯随机数生成一个新的密码,将其放入安全文件中,并将其包含在单独的 LUKS 插槽中。