如何在initramfs中的switch_root之前运行脚本?

如何在initramfs中的switch_root之前运行脚本?

我正在 initramfs 中启动 dropbear ssh 服务器,以便能够通过 SSH 解锁加密分区*

在 Debian Jessie 中,一切都很好,但在 Buster 中,dropbear 似乎并没有在 后停止switch_root,这会阻止 OpenBSD ssh 服务器启动。

apt-get purge dropbear没有帮助并且which dropbear打印/usr/bin/dropbearps -ef | grep dropbear打印/sbin/dropbear;这表明该进程是在 initramfs 阶段启动的,并且没有停止。

作为一种解决方法,我killall dropbear在 SSH 服务脚本中执行此操作,但在切换根分区之前将其终止会更合适。

此时我该如何运行该脚本?

答案1

创建清理脚本如下/etc/initramfs-tools/scripts/init-bottom/cleanup.sh

#!/bin/sh
echo "Killing dropbear"
killall dropbear
exit 0

...并使其可执行:

chmod +x /etc/initramfs-tools/scripts/init-bottom/cleanup.sh

像往常一样更新 initramfs:

update-initramfs -u 

答案2

您已经有一个调用 switch_root 的脚本,因此只需在其中插入一行即可停止 dropbear。

您还可以从 ssh 连接中停止它。一登录就有两个dropbear进程。第一个是接受新连接的进程,第二个是为您的连接提供服务的进程。此时您可以终止第一个进程,因为您不需要多个连接。一旦断开连接,第二个进程将终止。

在启动过程的早期阶段,您可以确定接受新连接的进程具有较低的进程号,尽管还有其他方法可以识别它。

相关内容