使用 systemd 服务启动时提示输入密码

使用 systemd 服务启动时提示输入密码

这与 Arch Linux(或许还有其他使用 的发行版)相关systemd。我想在启动时安装 TrueCrypt 分区。对于旧版本sysvinit,通过 . 调用的脚本非常简单rc.local

我通过劫持了当前的Arch 论坛主题。还有另一个线在哪里这个系统开发线程被谈论为“拥有解决方案”,但我不清楚它实际上是什么,并且OP在最后一篇文章中指出他无法实现他的目标。

从它的外观来看这个人正在这样做,但正在寻找一种方法来在输入密码时关闭连续启动消息。我也在那里发帖要求他发布他的实际.service文件。

在大量搜索中,人们提到他们已经成功或者这是可能的,但没有具体说明解决方案是什么。

我尽可能通过服务从命令行解锁分区systemd(这反过来又使我能够在关机/重新启动时自动卸载它),但登录后我必须手动执行此操作。我'我真的很喜欢启动过程暂停并询问我密码。

这是我当前的脚本:

[Unit]
Description=Truecrypt Setup for vault
#DefaultDependencies=no
#Conflicts=umount.target
#Before=umount.target
#After=systemd-readahead-collect.service systemd-readahead-replay.service
#After=cryptsetup.target

[Service]
Type=oneshot
RemainAfterExit=yes
#StandardInput=tty-force
ExecStart=/bin/sh -c '/usr/bin/truecrypt -t --protect-hidden=no -k "" --filesystem=none --slot=1 -p `systemd-ask-password "Enter password for truecrypt volume: "` /dev/sda4'
ExecStop=/usr/bin/truecrypt --filesystem=none -d /dev/sda4

[Install]
WantedBy=multi-user.target

我将评论的内容留在了 中[Unit],因为在某些时候我遇到了应该将其放在那里的建议,但我遇到了问题。上面的内容在启动/登录后似乎工作得很好......只是在期间不行。

答案1

  • 编写一个包装脚本并将其放入ExecStart=
  • 从包装器脚本中,使用systemd-ask-password <PROMPT>,从其标准输出读取密码并以任何需要的方式将其提供给 truecrypt
  • 不要忘记exec在脚本末尾进行 truecrypt,以免留下额外的 bash 进程

这将使 systemd 立即查询密码(如果您使用 systemctl 启动 apache)或使用所谓的代理之一(默认代理会在系统启动期间使用 wall 或直接在控制台上询问密码)。这是您保持合规性所能做的最好的事情。

答案2

我在 Unix StackExchange 上找到了这篇文章: 带有 read 的 rc.local 不会回显击键
我想你可以尝试使用的解决方案

相关内容