LUKS op afstand ontgrendelen via SSH: dropbear-initramfs en cryptroot-unlock
Ontgrendel een LUKS-root op een externe server tijdens het opstarten: installeer dropbear-initramfs, voeg je sleutel toe, stel poort en IP in, bouw de initramfs opnieuw en log dan via SSH in om cryptroot-unlock uit te voeren.
Kort gezegd: installeer `dropbear-initramfs`, zet je publieke SSH-sleutel in `/etc/dropbear/initramfs/authorized_keys` (Debian 12/13, Ubuntu 24.04), geef de initramfs een netwerkconfiguratie, voer `update-initramfs -u` uit en herstart. Terwijl de server op de passphrase wacht, log je via SSH in op de piepkleine Dropbear-server op zijn eigen poort en voer je `cryptroot-unlock` uit; daarna gaat het opstarten gewoon verder.
Deze gids gaat ervan uit dat het rootbestandssysteem al op LUKS staat, zoals ingericht in de handleiding voor een LUKS-versleutelde root, en dat `/boot` onversleuteld is, wat de standaard is in de installers van Debian en Ubuntu. Het werkt op elke KVM-VPS waar je de kernel en initramfs beheert, en het is een verstandige basis voordat je diensten zoals die in een self-hostingstack voor een kleine VPS op de schijf zet.
Hoe ontgrendelen op afstand werkt
Op een systeem met versleutelde root laadt de kernel eerst een initramfs, een klein tijdelijk rootbestandssysteem dat onversleuteld in `/boot` staat. Die moet het LUKS-apparaat vinden, om de passphrase vragen, het openen en de controle overdragen aan de echte root. Normaal verschijnt de prompt alleen op de lokale console.
`dropbear-initramfs` voegt drie dingen toe aan die initramfs: de Dropbear-SSH-server, een stap voor netwerkconfiguratie en de helper `cryptroot-unlock`. Dropbear start vóór de passphrase-prompt, accepteert alleen logins met de publieke sleutels die je erin hebt gezet, en `cryptroot-unlock` geeft je passphrase door aan de wachtende `cryptsetup`-prompt. Nadat de root is geopend, stopt de initramfs Dropbear en start je echte OpenSSH-server zoals gebruikelijk.
Bestandspaden verschillen per versie
De configuratiemap is verhuisd toen Dropbear 2022.83 verscheen. Veel oudere tutorials tonen nog het oude pad, en een sleutel die daar staat wordt op actuele releases stilzwijgend genegeerd. Controleer je release voordat je commando's kopieert.
Note · Het optiebestand is op elke release `dropbear.conf` in dezelfde map. Ook de hostsleutels van de initramfs staan daar (`dropbear_ed25519_host_key` en verwanten), los van de OpenSSH-hostsleutels van het draaiende systeem.
| Release | Configuratiemap | Sleutelbestand |
|---|---|---|
| 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 en ouder | `/etc/dropbear-initramfs/` | `/etc/dropbear-initramfs/authorized_keys` |
Stap voor stap instellen op Debian 12/13 en Ubuntu 24.04
- 01.Installeer het pakket: `apt install dropbear-initramfs`. Een waarschuwing over een ontbrekend of ongeldig `authorized_keys`-bestand is op dit punt te verwachten.
- 02.Voeg je publieke sleutel, bij voorkeur een aparte Ed25519-sleutel, toe aan `/etc/dropbear/initramfs/authorized_keys`, één sleutel per regel, en beperk hem zodat hij alleen kan ontgrendelen.
- 03.Stel Dropbear-opties in `/etc/dropbear/initramfs/dropbear.conf` in, waaronder een niet-standaard poort, zodat de hostsleutel van de initramfs niet botst met je normale SSH-hostsleutel in `known_hosts`.
- 04.Configureer het netwerk voor de initramfs met de kernelparameter `ip=` (statisch) of vertrouw op DHCP als het netwerk van je VPS dat ondersteunt.
- 05.Bouw de initramfs opnieuw met `update-initramfs -u` en voer, als je de kernel-commandline hebt gewijzigd, `update-grub` uit.
- 06.Herstart met console-toegang open als terugvaloptie, verbind dan en voer `cryptroot-unlock` uit.
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 -uNetwerkconfiguratie in de initramfs
De initramfs leest `/etc/network/interfaces`, netplan of systemd-networkd niet. Hij gebruikt de kernelparameter `ip=`, of de regel `IP=` in `/etc/initramfs-tools/initramfs.conf`. Is geen van beide ingesteld, dan probeert hij DHCP op alle interfaces, wat bij veel clouds werkt maar niet gegarandeerd is op een VPS met een statische toewijzing.
Het formaat is `ip=<client-ip>::<gateway-ip>:<netmask>:<hostname>:<device>:off`. Gebruik de waarden van `ip -4 addr` en `ip route` op het draaiende systeem. De interfacenaam binnen de initramfs is meestal dezelfde voorspelbare naam (bijvoorbeeld `ens3` of `eth0`); twijfel je, laat het apparaatveld dan leeg en de eerste interface wordt gebruikt. IPv4 is hier de betrouwbare keuze, omdat de IPv6-ondersteuning in de netwerkstap van de initramfs beperkt is.
# /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-unlockOntgrendelen en dagelijks gebruik
Wacht na een herstart tot de server op poort 2222 antwoordt en verbind dan als `root`. Met het geforceerde commando uit de installatiestap start `cryptroot-unlock` meteen en vraagt het om de LUKS-passphrase; zonder dat commando krijg je een BusyBox-shell en typ je `cryptroot-unlock` zelf. Lukt het, dan sluit de sessie, gaat de initramfs verder met opstarten en antwoordt een minuut later je gewone SSH-server op poort 22, gehard zoals in de handleiding voor SSH-hardening.
Gebruik een aparte `known_hosts`-vermelding voor de ontgrendelpoort, bijvoorbeeld een blok `Host myserver-unlock` in `~/.ssh/config` met `Port 2222` en `HostKeyAlias myserver-unlock`. Elke keer dat de kernel wordt bijgewerkt, genereren Debian en Ubuntu de initramfs opnieuw en behouden ze je Dropbear-sleutel en -opties, maar test na grote upgrades wel één herstart.
- ▹Connection refused: de netwerkconfiguratie klopt niet; controleer de `ip=`-waarden via de console.
- ▹Waarschuwing over de hostsleutel: je raakt de hostsleutel van de initramfs onder de normale alias; gebruik de aparte alias.
- ▹`cryptroot-unlock` meldt dat er geen apparaten wachten: het systeem is al opgestart, of `/etc/crypttab` mist de root-vermelding.
- ▹Sleutelwijzigingen hebben geen effect: je hebt het oude pad `/etc/dropbear-initramfs/` bewerkt of `update-initramfs -u` vergeten.
Dreigingsmodel: wat ontgrendelen op afstand wel en niet beschermt
LUKS met ontgrendelen op afstand beschermt opgeslagen gegevens. Een uitgeschakelde schijf, een gekopieerd schijfimage, een afgedankte drive of een server die uitgeschakeld in beslag wordt genomen, toont alleen versleutelde data. Dat is een echte en nuttige garantie voor een VPS.
Het beschermt een draaiende server niet tegen wie de host beheert. De initramfs en kernel in `/boot` zijn onversleuteld, dus iemand met toegang tot de hypervisor of console kan ze aanpassen om bij de volgende start je passphrase vast te leggen, en het geheugen van een draaiende VM, inclusief de LUKS-masterkey, kan vanaf de host worden uitgelezen. Zie ontgrendelen op afstand als bescherming tegen inbeslagname en uitgelekte schijven, niet tegen een vijandige hypervisor. Afwijkingen tijdens het herstarten, zoals een gewijzigde Dropbear-hostsleutel, zijn het onderzoeken waard.
Note · Op een NoctisNode-VPS krijg je volledige root op KVM met de images van Debian 13/12 en Ubuntu 24.04, dus deze opzet werkt zoals beschreven. Dezelfde grens geldt hier als overal: versleuteling beschermt de schijf, geen draaiende guest. Zie no-logs-VPS uitgelegd voor wat de provider wel en niet registreert.
Veelgestelde vragen
QWaar staat het authorized_keys-bestand van dropbear-initramfs op Debian 12?
AOp Debian 12 en 13 en op Ubuntu 24.04 is dat `/etc/dropbear/initramfs/authorized_keys`. Debian 11 en Ubuntu 22.04 gebruikten `/etc/dropbear-initramfs/authorized_keys`. Voer na elke wijziging `update-initramfs -u` uit.
QWat doet cryptroot-unlock?
A`cryptroot-unlock` is een helper binnen de initramfs die de wachtende LUKS-passphrase-prompt opzoekt en je ingetypte passphrase eraan doorgeeft. Zodra het apparaat opent, gaat het opstarten verder en eindigt de Dropbear-sessie.
QHoe wijzig ik de SSH-poort van dropbear-initramfs?
AZet `DROPBEAR_OPTIONS="-p 2222"` (plus eventuele andere flags) in `/etc/dropbear/initramfs/dropbear.conf`, voer dan `update-initramfs -u` uit en herstart.
QIs LUKS op afstand ontgrendelen via SSH veilig op een VPS?
AHet beschermt gegevens op een uitgeschakelde of gekopieerde schijf. Het kan niet beschermen tegen iemand met toegang tot de hypervisor, die de onversleutelde initramfs kan aanpassen of het geheugen van de draaiende VM kan uitlezen.
QKan ik LUKS2 gebruiken met dropbear-initramfs?
AJa. Het ontgrendelen gebeurt in de Linux-userspace met `cryptsetup`, dus LUKS2 met Argon2id werkt; zie LUKS2 vs. LUKS1 voor de verschillen tussen de formaten.