使用脚本传递 luks 密码来解锁加密的 rootfs,而不是从终端传递

使用脚本传递 luks 密码来解锁加密的 rootfs,而不是从终端传递

我想开发一个脚本,当 cryptroot 要求用户解锁时,它会传递 LUKS 密码,而不是通过键盘传递。我尝试修改 cryptroot 脚本,但无法运行它。

如果能得到任何建议就太好了。谢谢。

答案1

先前由@Quanten 回答是错的。

这应该足够了

echo "123" | cryptsetup luksOpen /dev/sda1 sda1 -

密钥文件与密码不同。

答案2

Cryptsetup 有一个选项-d--keyfile,并以破折号作为文件名,cryptsetup 从 stdin 读取(参见手册页)

通过这个,您可以将密码从环境变量传递给 cryptsetup:

echo $password | cryptsetup luksOpen /dev/sdXX cryptroot -d -

确切的语法取决于您的脚本。

如果这是一个好主意,那么从安全角度来看又是另一个问题......

答案3

这是我在 Python 中的做法

    import os
    import time
      
    system_password = "admin"
    pass = "password123"
    key_file = "/root/key_file"
    slot = 1
    os.system("echo %s > %s" % (system_password, key_file))
    cmd = "echo -n %s | /sbin/cryptsetup luksAddKey /dev/sdx --key-file %s --batch-mode --key-slot %s" % (pass, key_file, slot)
    os.system(cmd)

删除密码

cmd = "echo -n %s | /sbin/cryptsetup luksRemoveKey /dev/sdx" % (pass)
os.system(cmd)

确保 echo 命令有-n选项,只是为了确保换行符不包含在密码中。

相关内容