You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让LUKS加密的Debian服务器5分钟未解锁自动关机?

解决Debian LUKS加密服务器未解锁自动延迟关机的问题

核心思路

initramfs是精简的启动环境,不包含完整的shutdown命令,但可以通过后台睡眠+强制关机的组合实现延迟关机,同时在LUKS解锁成功后取消该任务。


步骤1:创建延迟关机的初始化脚本

在initramfs的init-premount阶段(LUKS解锁前执行)添加自动关机脚本:

  1. 创建脚本文件:
touch /etc/initramfs-tools/scripts/init-premount/luks-auto-shutdown
  1. 写入以下内容:
#!/bin/sh
PREREQ=""
prereqs() {
    echo "$PREREQ"
}
case "$1" in
prereqs)
    prereqs
    exit 0
    ;;
esac

# 后台执行:延迟5分钟(300秒)后强制关机
( sleep 300 && /bin/halt -f ) &
  1. 赋予执行权限:
chmod +x /etc/initramfs-tools/scripts/init-premount/luks-auto-shutdown

步骤2:创建解锁成功后取消关机的脚本

在LUKS解锁完成后的local-top阶段,添加取消延迟关机的脚本:

  1. 创建脚本文件:
touch /etc/initramfs-tools/scripts/local-top/cancel-auto-shutdown
  1. 写入以下内容:
#!/bin/sh
PREREQ=""
prereqs() {
    echo "$PREREQ"
}
case "$1" in
prereqs)
    prereqs
    exit 0
    ;;
esac

# 杀掉后台运行的sleep和halt进程,取消关机任务
pkill sleep
pkill halt
  1. 赋予执行权限:
chmod +x /etc/initramfs-tools/scripts/local-top/cancel-auto-shutdown

步骤3:更新initramfs

让新脚本生效:

update-initramfs -u

验证逻辑

  • 服务器启动后,会立即在后台启动一个sleep 300任务,到期后执行halt -f强制关机;
  • 若在5分钟内成功解锁LUKS分区,local-top阶段的脚本会杀掉sleep和halt进程,自动取消关机;
  • 若未按时解锁,服务器会在5分钟后自动关机。

注意事项

  • 确保initramfs中包含sleep、halt和pkill命令:Debian默认initramfs基于busybox,这些工具均已内置;
  • halt -f参数用于强制跳过正常关机流程,适配initramfs的精简环境。

内容的提问来源于stack exchange,提问作者George

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 06:25:38