Удалённая разблокировка LUKS по SSH: dropbear-initramfs и cryptroot-unlock
Разблокируйте LUKS-root удалённого сервера при загрузке: установите dropbear-initramfs, добавьте ключ, задайте порт и IP, пересоберите initramfs, затем зайдите по SSH и выполните cryptroot-unlock.
Коротко: установите `dropbear-initramfs`, положите свой публичный SSH-ключ в `/etc/dropbear/initramfs/authorized_keys` (Debian 12/13, Ubuntu 24.04), задайте сетевые настройки для initramfs, выполните `update-initramfs -u` и перезагрузитесь. Пока сервер ждёт пароль, зайдите по SSH на крошечный сервер Dropbear на отдельном порту и выполните `cryptroot-unlock`; после этого загрузка продолжится как обычно.
Руководство предполагает, что корневая файловая система уже на LUKS, как в руководстве по шифрованию root через LUKS, а `/boot` не зашифрован — это поведение установщиков Debian и Ubuntu по умолчанию. Схема работает на любом KVM VPS, где вы управляете ядром и initramfs, и это разумная основа, прежде чем размещать на диске сервисы вроде описанных в self-hosting стеке для небольшого VPS.
Как работает удалённая разблокировка
В системе с зашифрованным root ядро сначала загружает initramfs — небольшую временную корневую файловую систему, которая хранится незашифрованной в `/boot`. Её задача — найти LUKS-устройство, запросить пароль, открыть его и передать управление настоящему root. Обычно запрос пароля появляется только на локальной консоли.
`dropbear-initramfs` добавляет в этот initramfs три вещи: SSH-сервер Dropbear, шаг настройки сети и помощник `cryptroot-unlock`. Dropbear стартует до запроса пароля, принимает вход только по публичным ключам, вшитым в образ, а `cryptroot-unlock` передаёт ваш пароль ожидающему запросу `cryptsetup`. После открытия root initramfs завершает Dropbear, и ваш обычный сервер OpenSSH запускается как всегда.
Пути к файлам различаются между версиями
Каталог конфигурации переехал с приходом Dropbear 2022.83. Многие старые инструкции всё ещё показывают старый путь, и ключ, положенный туда, в текущих релизах молча игнорируется. Проверьте свой релиз, прежде чем копировать команды.
Note · Файл опций — `dropbear.conf` в том же каталоге во всех релизах. Там же лежат host-ключи initramfs (`dropbear_ed25519_host_key` и другие); они отдельны от host-ключей OpenSSH работающей системы.
| Релиз | Каталог конфигурации | Файл ключей |
|---|---|---|
| Debian 13 (trixie) | `/etc/dropbear/initramfs/` | `/etc/dropbear/initramfs/authorized_keys` |
| Debian 12 (bookworm) | `/etc/dropbear/initramfs/` | `/etc/dropbear/initramfs/authorized_keys` |
| Ubuntu 24.04 (noble) | `/etc/dropbear/initramfs/` | `/etc/dropbear/initramfs/authorized_keys` |
| Debian 11, Ubuntu 22.04 и старше | `/etc/dropbear-initramfs/` | `/etc/dropbear-initramfs/authorized_keys` |
Пошаговая настройка на Debian 12/13 и Ubuntu 24.04
- 01.Установите пакет: `apt install dropbear-initramfs`. Предупреждение об отсутствующем или неверном файле `authorized_keys` на этом этапе ожидаемо.
- 02.Добавьте свой публичный ключ — лучше отдельный ключ Ed25519 — в `/etc/dropbear/initramfs/authorized_keys`, по одному ключу на строку, и ограничьте его так, чтобы он мог только разблокировать.
- 03.Задайте опции Dropbear в `/etc/dropbear/initramfs/dropbear.conf`, включая нестандартный порт, чтобы host-ключ initramfs не конфликтовал с вашим обычным host-ключом SSH в `known_hosts`.
- 04.Настройте сеть для initramfs параметром ядра `ip=` (статически) или положитесь на DHCP, если сеть вашего VPS его поддерживает.
- 05.Пересоберите initramfs командой `update-initramfs -u` и, если меняли командную строку ядра, выполните `update-grub`.
- 06.Перезагрузитесь, держа открытым доступ к консоли на всякий случай, затем подключитесь и выполните `cryptroot-unlock`.
apt install dropbear-initramfs
# 1. Key (forced command: the key can only unlock)
echo 'no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="/bin/cryptroot-unlock" ssh-ed25519 AAAA...yourkey unlock@laptop' \
> /etc/dropbear/initramfs/authorized_keys
chmod 600 /etc/dropbear/initramfs/authorized_keys
# 2. Options in /etc/dropbear/initramfs/dropbear.conf
# -p 2222 listen on port 2222
# -s disable password logins
# -j -k no local/remote port forwarding
# -I 300 drop idle sessions after 300 s
DROPBEAR_OPTIONS="-p 2222 -s -j -k -I 300"
# 3. Rebuild
update-initramfs -uНастройка сети в initramfs
initramfs не читает `/etc/network/interfaces`, netplan или systemd-networkd. Он использует параметр ядра `ip=` или строку `IP=` в `/etc/initramfs-tools/initramfs.conf`. Если не задано ни то ни другое, он пробует DHCP на всех интерфейсах — на многих облаках это работает, но на VPS со статической адресацией не гарантировано.
Формат: `ip=<client-ip>::<gateway-ip>:<netmask>:<hostname>:<device>:off`. Возьмите значения из `ip -4 addr` и `ip route` в работающей системе. Имя интерфейса внутри initramfs обычно то же предсказуемое имя (например, `ens3` или `eth0`); если не уверены, оставьте поле устройства пустым — будет использован первый интерфейс. Надёжный выбор здесь — IPv4, поскольку поддержка IPv6 на шаге настройки сети initramfs ограничена.
# /etc/default/grub (static IPv4 example, documentation addresses)
GRUB_CMDLINE_LINUX="ip=203.0.113.10::203.0.113.1:255.255.255.0::ens3:off"
update-grub
update-initramfs -u
# From your workstation after reboot:
ssh -p 2222 [email protected]
# without the forced command, type: cryptroot-unlockРазблокировка и повседневное использование
После перезагрузки дождитесь, пока сервер ответит на порту 2222, и подключитесь как `root`. С принудительной командой из шага настройки `cryptroot-unlock` запускается сразу и спрашивает пароль LUKS; без неё вы попадёте в оболочку BusyBox и наберёте `cryptroot-unlock` сами. При успехе сессия закроется, initramfs продолжит загрузку, и через минуту ваш обычный SSH-сервер ответит на порту 22, укреплённый по руководству по защите SSH.
Заведите отдельную запись `known_hosts` для порта разблокировки, например блок `Host myserver-unlock` в `~/.ssh/config` с `Port 2222` и `HostKeyAlias myserver-unlock`. При каждом обновлении ядра Debian и Ubuntu пересобирают initramfs, сохраняя ваш ключ и опции Dropbear, но после крупных обновлений проверьте одну перезагрузку.
- ▹Connection refused: неверные сетевые настройки; проверьте значения `ip=` на консоли.
- ▹Предупреждение о host-ключе: вы попадаете на host-ключ initramfs под обычным алиасом; используйте отдельный алиас.
- ▹`cryptroot-unlock` сообщает, что ожидающих устройств нет: система уже загрузилась, или в `/etc/crypttab` нет записи для root.
- ▹Изменения ключей не действуют: вы правили старый путь `/etc/dropbear-initramfs/` или забыли `update-initramfs -u`.
Модель угроз: от чего удалённая разблокировка защищает, а от чего нет
LUKS с удалённой разблокировкой защищает данные в покое. Выключенный диск, скопированный образ диска, списанный накопитель или сервер, изъятый в выключенном состоянии, раскрывают только шифротекст. Для VPS это реальная и полезная гарантия.
Она не защищает работающий сервер от того, кто контролирует хост. initramfs и ядро в `/boot` не зашифрованы, поэтому человек с доступом к гипервизору или консоли может изменить их, чтобы записать ваш пароль при следующей загрузке, а память работающей ВМ, включая мастер-ключ LUKS, можно прочитать с хоста. Считайте удалённую разблокировку защитой от изъятия и утечки дисков, а не от враждебного гипервизора. Аномалии при перезагрузке, например сменившийся host-ключ Dropbear, стоит расследовать.
Note · На VPS NoctisNode у вас полный root на KVM с образами Debian 13/12 и Ubuntu 24.04, так что эта схема работает как описано. Ограничение здесь то же, что и везде: шифрование защищает диск, а не работающую гостевую систему. Что записывает и не записывает провайдер, см. в статье что значит VPS без логов.
FAQ
QГде лежит файл authorized_keys для dropbear initramfs в Debian 12?
AВ Debian 12 и 13 и в Ubuntu 24.04 это `/etc/dropbear/initramfs/authorized_keys`. В Debian 11 и Ubuntu 22.04 использовался `/etc/dropbear-initramfs/authorized_keys`. После любых изменений выполните `update-initramfs -u`.
QЧто делает cryptroot-unlock?
A`cryptroot-unlock` — помощник внутри initramfs, который находит ожидающий запрос пароля LUKS и передаёт ему введённый вами пароль. Как только устройство открывается, загрузка продолжается, а сессия Dropbear завершается.
QКак сменить SSH-порт dropbear-initramfs?
AЗадайте `DROPBEAR_OPTIONS="-p 2222"` (плюс другие флаги) в `/etc/dropbear/initramfs/dropbear.conf`, затем выполните `update-initramfs -u` и перезагрузитесь.
QБезопасна ли удалённая разблокировка LUKS по SSH на VPS?
AОна защищает данные на выключенном или скопированном диске. Она не может защитить от человека с доступом к гипервизору, который способен изменить незашифрованный initramfs или прочитать память работающей ВМ.
QМожно ли использовать LUKS2 с dropbear-initramfs?
AДа. Разблокировка происходит в пользовательском пространстве Linux через `cryptsetup`, поэтому LUKS2 с Argon2id работает; различия форматов — в статье LUKS2 против LUKS1.