对于优盘版本2.6.4然后

对于优盘版本2.6.4然后

目前,我这样做是为了安装我的加密拇指驱动器:

# Works!
pass thumbdrive-password | # get device password entry from password manager
    head -n 1 | # get the device password itself
    sudo cryptsetup luksOpen /dev/sdb thumbdrive # unlock device
udisksctl mount -b /dev/mapper/thumbdrive # mount device

我想做这样的事情:

# Does not work!
pass thumbdrive-password |
    head -n 1 |
    udisksctl unlock -b /dev/sdb # unlock device
udisksctl mount -b /dev/mapper/luks-foobar # mount device with uuid "foobar"

这将允许半特权用户(org.freedesktop.udisks2.filesystem-mount在 polkit 中具有权限)无需使用 sudo 即可挂载加密文件系统。 Udisk 不会接受这种管道方法,因为它使用交互式密码提示。如何在udisksctl unlock不手动输入的情况下提供我的设备密码?

答案1

对于优盘版本2.6.4然后

笔记:我没有测试过这个。一旦我得到 udisks 2.6.4 我就会(每当https://github.com/NixOS/nixpkgs/pull/41723向后移植到 NixOS 稳定版)。

更新:我现在有 udisks 2.8.0,所以我可以测试我的解决方案。我唯一错过的是从 的输出中删除尾随换行符pass (...) | head (...)。要修剪它,请使用-n标志echo,或附加| tr -d '\n'head输出 。我在下面的两个解决方案中反映了这一点。

通用(不安全)解决方案

使用该--key-file标志并用密码字符串代替密钥文件。/dev/sdb使用密码解锁hunter2

udisksctl unlock --block-device /dev/sdb --key-file <(echo -n "hunter2")

直接通过命令行传递敏感数据是不安全的,因此应避免使用此方法。

pass执行

相反,使用 检索密码字符串pass thumbdrive-password | head -n 1,修剪尾随换行符,并将其替换为密钥文件:

udisksctl unlock \
    --block-device /dev/sdb \
    --key-file <(pass thumbdrive-password | head -n 1 | tr -d '\n')

答案2

问题是数据不是从控制终端读取的,stdin而是从控制终端读取的:

解锁
解锁加密设备。将从控制终端请求密码,成功完成后,明文设备将打印到标准输出。

您可以使用霜冻建议的解决方法,也可以使用技巧使管道输入出现在控制终端上,例如使用expectsocat

pass thumbdrive-password |
    head -n 1 |
    socat - EXEC:'udisksctl unlock -b /dev/sdb',pty,setsid,ctty

答案3

贡献永远不会太晚。我只需运行 #sudo apt-get install udisks2-lvm2 它就会自动安装。 Kubuntu 20.4 - 1TB SATA 磁盘的 USB 适配器。

相关内容