Déverrouillage LUKS à distance via SSH : dropbear-initramfs et cryptroot-unlock
Déverrouillez au démarrage une racine LUKS sur un serveur distant : installez dropbear-initramfs, ajoutez votre clé, définissez port et IP, reconstruisez l'initramfs, puis connectez-vous en SSH et lancez cryptroot-unlock.
En bref : installez `dropbear-initramfs`, placez votre clé publique SSH dans `/etc/dropbear/initramfs/authorized_keys` (Debian 12/13, Ubuntu 24.04), donnez une configuration réseau à l'initramfs, lancez `update-initramfs -u` et redémarrez. Pendant que le serveur attend la phrase de passe, connectez-vous en SSH au petit serveur Dropbear sur son propre port et lancez `cryptroot-unlock` ; le démarrage se poursuit alors normalement.
Ce guide suppose que le système de fichiers racine est déjà sur LUKS, comme dans le guide racine chiffrée LUKS, et que `/boot` n'est pas chiffré, ce qui est le choix par défaut des installateurs Debian et Ubuntu. Il fonctionne sur tout VPS KVM où vous contrôlez le noyau et l'initramfs, et constitue une base judicieuse avant d'installer sur le disque des services comme ceux d'une stack d'auto-hébergement pour petit VPS.
Comment fonctionne le déverrouillage à distance
Sur un système à racine chiffrée, le noyau charge d'abord un initramfs, un petit système de fichiers racine temporaire stocké en clair dans `/boot`. Son rôle : trouver le périphérique LUKS, demander la phrase de passe, l'ouvrir et passer la main à la vraie racine. Normalement, l'invite n'apparaît que sur la console locale.
`dropbear-initramfs` ajoute trois éléments à cet initramfs : le serveur SSH Dropbear, une étape de configuration réseau et l'utilitaire `cryptroot-unlock`. Dropbear démarre avant l'invite de phrase de passe, n'accepte que les connexions par clé publique avec les clés intégrées, et `cryptroot-unlock` transmet votre phrase de passe à l'invite `cryptsetup` en attente. Une fois la racine ouverte, l'initramfs arrête Dropbear et votre vrai serveur OpenSSH démarre comme d'habitude.
Les chemins de fichiers diffèrent selon les versions
Le répertoire de configuration a changé avec l'arrivée de Dropbear 2022.83. Beaucoup d'anciens tutoriels montrent encore l'ancien chemin, et une clé placée là est ignorée sans avertissement sur les versions actuelles. Vérifiez votre version avant de copier des commandes.
Note · Le fichier d'options est `dropbear.conf` dans le même répertoire sur toutes les versions. Les clés d'hôte de l'initramfs s'y trouvent aussi (`dropbear_ed25519_host_key` et consorts) et sont distinctes des clés d'hôte OpenSSH du système en fonctionnement.
| Version | Répertoire de configuration | Fichier de clés |
|---|---|---|
| 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 et antérieures | `/etc/dropbear-initramfs/` | `/etc/dropbear-initramfs/authorized_keys` |
Configuration pas à pas sur Debian 12/13 et Ubuntu 24.04
- 01.Installez le paquet : `apt install dropbear-initramfs`. Un avertissement concernant un fichier `authorized_keys` absent ou invalide est normal à ce stade.
- 02.Ajoutez votre clé publique, idéalement une clé Ed25519 dédiée, dans `/etc/dropbear/initramfs/authorized_keys`, une clé par ligne, et restreignez-la pour qu'elle ne puisse servir qu'au déverrouillage.
- 03.Définissez les options de Dropbear dans `/etc/dropbear/initramfs/dropbear.conf`, dont un port non standard pour que la clé d'hôte de l'initramfs n'entre pas en conflit avec votre clé d'hôte SSH habituelle dans `known_hosts`.
- 04.Configurez le réseau de l'initramfs avec le paramètre noyau `ip=` (statique) ou comptez sur DHCP si le réseau de votre VPS le permet.
- 05.Reconstruisez l'initramfs avec `update-initramfs -u` et, si vous avez modifié la ligne de commande du noyau, lancez `update-grub`.
- 06.Redémarrez en gardant l'accès console ouvert en secours, puis connectez-vous et lancez `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 -uConfiguration réseau dans l'initramfs
L'initramfs ne lit ni `/etc/network/interfaces`, ni netplan, ni systemd-networkd. Il utilise le paramètre noyau `ip=`, ou la ligne `IP=` de `/etc/initramfs-tools/initramfs.conf`. Si aucun n'est défini, il tente DHCP sur toutes les interfaces, ce qui fonctionne sur de nombreux clouds mais n'est pas garanti sur un VPS à adressage statique.
Le format est `ip=<client-ip>::<gateway-ip>:<netmask>:<hostname>:<device>:off`. Utilisez les valeurs de `ip -4 addr` et `ip route` sur le système en fonctionnement. Le nom d'interface dans l'initramfs est généralement le même nom prévisible (par exemple `ens3` ou `eth0`) ; en cas de doute, laissez le champ device vide et la première interface sera utilisée. IPv4 est le choix fiable ici, car la prise en charge d'IPv6 dans l'étape réseau de l'initramfs est limitée.
# /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-unlockDéverrouillage et usage quotidien
Après un redémarrage, attendez que le serveur réponde sur le port 2222, puis connectez-vous en `root`. Avec la commande forcée de l'étape de configuration, `cryptroot-unlock` démarre immédiatement et demande la phrase de passe LUKS ; sans elle, vous obtenez un shell BusyBox et tapez `cryptroot-unlock` vous-même. En cas de succès, la session se ferme, l'initramfs poursuit le démarrage et, une minute plus tard, votre serveur SSH habituel répond sur le port 22, durci comme dans le guide de durcissement SSH.
Utilisez une entrée `known_hosts` séparée pour le port de déverrouillage, par exemple un bloc `Host myserver-unlock` dans `~/.ssh/config` avec `Port 2222` et `HostKeyAlias myserver-unlock`. À chaque mise à jour du noyau, Debian et Ubuntu régénèrent l'initramfs en conservant votre clé et vos options Dropbear, mais testez un redémarrage après les mises à niveau majeures.
- ▹Connexion refusée : la configuration réseau est erronée ; vérifiez les valeurs `ip=` sur la console.
- ▹Avertissement de clé d'hôte : vous tombez sur la clé d'hôte de l'initramfs sous l'alias habituel ; utilisez l'alias séparé.
- ▹`cryptroot-unlock` indique qu'aucun périphérique n'est en attente : le système a déjà démarré, ou `/etc/crypttab` ne contient pas l'entrée de la racine.
- ▹Les modifications de clé n'ont aucun effet : vous avez modifié l'ancien chemin `/etc/dropbear-initramfs/` ou oublié `update-initramfs -u`.
Modèle de menace : ce que le déverrouillage à distance protège ou non
LUKS avec déverrouillage à distance protège les données au repos. Un disque éteint, une image disque copiée, un disque mis au rebut ou un serveur saisi alors qu'il est arrêté ne révèlent que du texte chiffré. C'est une garantie réelle et utile pour un VPS.
Cela ne protège pas un serveur en fonctionnement contre quiconque contrôle l'hôte. L'initramfs et le noyau dans `/boot` ne sont pas chiffrés : une personne ayant accès à l'hyperviseur ou à la console peut les modifier pour enregistrer votre phrase de passe au prochain démarrage, et la mémoire d'une VM en fonctionnement, y compris la clé maîtresse LUKS, peut être lue depuis l'hôte. Considérez le déverrouillage à distance comme une protection contre la saisie et les fuites de disque, pas contre un hyperviseur hostile. Les anomalies au redémarrage, comme une clé d'hôte Dropbear modifiée, méritent une enquête.
Note · Sur un VPS NoctisNode, vous disposez de l'accès root complet en KVM avec les images Debian 13/12 et Ubuntu 24.04 : cette configuration fonctionne comme décrit. La même limite s'applique ici comme partout : le chiffrement protège le disque, pas un invité en fonctionnement. Voir le VPS no-logs expliqué pour ce que l'hébergeur enregistre ou non.
FAQ
QOù se trouve le fichier authorized_keys de dropbear initramfs sur Debian 12 ?
ASur Debian 12 et 13 et sur Ubuntu 24.04, c'est `/etc/dropbear/initramfs/authorized_keys`. Debian 11 et Ubuntu 22.04 utilisaient `/etc/dropbear-initramfs/authorized_keys`. Lancez `update-initramfs -u` après toute modification.
QQue fait cryptroot-unlock ?
A`cryptroot-unlock` est un utilitaire de l'initramfs qui trouve l'invite de phrase de passe LUKS en attente et lui transmet la phrase que vous tapez. Une fois le périphérique ouvert, le démarrage se poursuit et la session Dropbear se termine.
QComment changer le port SSH de dropbear-initramfs ?
ADéfinissez `DROPBEAR_OPTIONS="-p 2222"` (avec d'éventuels autres drapeaux) dans `/etc/dropbear/initramfs/dropbear.conf`, puis lancez `update-initramfs -u` et redémarrez.
QLe déverrouillage LUKS à distance via SSH est-il sûr sur un VPS ?
AIl protège les données d'un disque éteint ou copié. Il ne peut pas protéger contre une personne ayant accès à l'hyperviseur, qui pourrait altérer l'initramfs non chiffré ou lire la mémoire de la VM en fonctionnement.
QPuis-je utiliser LUKS2 avec dropbear-initramfs ?
AOui. Le déverrouillage a lieu dans l'espace utilisateur Linux avec `cryptsetup` : LUKS2 avec Argon2id fonctionne ; voir LUKS2 ou LUKS1 pour les différences de format.