我的目标是将该 USB 的解锁延迟到系统以ssh.service
活动状态启动之后,并且在键入之前永远不会超时。然而超时仍然发生并继续进行getty
。一旦出现密码提示,您就无法输入密码(未附加 TTY)
我一直在复制via 中的auto
结果。我也一直在寻找是否可以连接到控制台 TTY。/etc/crypttab
systemd-cryptsetup-generator
systemctl list-dependencies
sysinit.target
systemd-ask-password-console.path
/etc/crypttab
crypt /dev/disk/by-label/crypt none nofail,noauto,timeout=0,x-systemd.device-timeout=0
/etc/systemd/system/finish.target
[Unit]
Description=Mount crypt USB
Requires=multi-user.target
[email protected] systemd-ask-password-console.path
After=ssh.target
[email protected]
[Install]
WantedBy=multi-user.target
如果我这样做Wants=mnt-crypt.mount
或者Wants=dev-mapper-crypt.device
它实际上尊重超时,但仍然不接受密码输入。
ls -la /etc/systemd/system/multi-user.target.wants/finish.target
lrwxrwxrwx. 1 root root 33 Jun 6 00:04 /etc/systemd/system/multi-user.target.wants/finish.target -> /etc/systemd/system/finish.target
systemctl list-dependencies
● ├─finish.target
● │ ├─systemd-ask-password-console.path
● │ ├─[email protected]
│ └─...
如果我这样做,systemctl restart systemd-ask-password-console.service
我实际上可以开始输入密码,并且它在执行终端和屏幕上的控制台上都按预期工作(/dev/tty1
)。
似乎有某种关系阻止了systemd-ask-password-console
初始启动后的启动,因为它很乐意稍后启动systemd-ask-password-wall
。
同样,如果我复制它并将其编辑为新服务,它也会启动该systemd-ask password --watch --console
过程。
经过多次试验和错误,我认为您无法重用任何内置单元,因为它们在启动过程早期严重依赖于单元。我们必须创建自己的单位并使用非常简单的命令。
这些带有解锁的默认超时 300 秒(如果需要,请删除),然后在超时后它会像平常一样通过墙通知其他密码请求。
我们禁用ask-password-wall服务,然后在控制台查询单个密码。为什么不使用
systemd-ask-password-console.path|systemd-ask-password-console.service
?--watch
进行多个查询,因为在本例中我们只需要 1 个查询。正如您所看到
attach-crypt-usb.service
的[email protected]
,这首先是因为集成,其次是因为否则安装单元mnt-crypt.mount
将触发 systemd-cryptsetup 尝试在请求时同时附加 dm-disk。如果您有任何意见或反馈,请随时留下 - 我会回来并更新,因为它经过了战斗测试。