目前,我这样做是为了挂载我的加密拇指驱动器:
# 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 的情况下挂载加密的文件系统。Udisks 不会接受这种管道方法,因为它使用交互式密码提示。udisksctl unlock
如何在不手动输入的情况下提供我的设备密码?
对于 udisks版本 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
:直接通过命令行传递敏感数据是不安全的,所以应该避免这种方法。
pass
执行相反,使用 检索密码字符串
pass thumbdrive-password | head -n 1
,修剪尾随换行符,并将其替换为密钥文件:问题是数据不是从控制终端读取的,
stdin
而是从控制终端读取的:您可以使用建议的解决方法frostschutz 或使用技巧使管道输入出现在控制终端上,例如使用
expect
或socat
。做出贡献永远不会太晚。我只需运行 #sudo apt-get install udisks2-lvm2 它就会自动挂载。Kubuntu 20.4 - USB 适配器到 1TB SATA 磁盘。