LUKS per SSH aus der Ferne entsperren: dropbear-initramfs und cryptroot-unlock
Ein LUKS-Root auf einem entfernten Server beim Booten entsperren: dropbear-initramfs installieren, Schlüssel hinzufügen, Port und IP setzen, initramfs neu bauen, dann per SSH einloggen und cryptroot-unlock ausführen.
Kurz gesagt: Installieren Sie `dropbear-initramfs`, legen Sie Ihren öffentlichen SSH-Schlüssel in `/etc/dropbear/initramfs/authorized_keys` ab (Debian 12/13, Ubuntu 24.04), geben Sie dem initramfs eine Netzwerkkonfiguration, führen Sie `update-initramfs -u` aus und starten Sie neu. Während der Server auf die Passphrase wartet, verbinden Sie sich per SSH mit dem winzigen Dropbear-Server auf seinem eigenen Port und führen `cryptroot-unlock` aus; danach bootet das System normal weiter.
Diese Anleitung setzt voraus, dass das Root-Dateisystem bereits auf LUKS liegt, wie in der Anleitung zu LUKS-verschlüsseltem Root eingerichtet, und dass `/boot` unverschlüsselt ist — die Standardeinstellung der Debian- und Ubuntu-Installer. Das funktioniert auf jedem KVM-VPS, bei dem Sie Kernel und initramfs kontrollieren, und ist eine sinnvolle Basis, bevor Sie Dienste wie die aus einem Self-Hosting-Stack für kleine VPS auf die Disk bringen.
Wie das Entsperren aus der Ferne funktioniert
Auf einem System mit verschlüsseltem Root lädt der Kernel zuerst ein initramfs, ein kleines temporäres Root-Dateisystem, das unverschlüsselt in `/boot` liegt. Seine Aufgabe ist, das LUKS-Gerät zu finden, nach der Passphrase zu fragen, es zu öffnen und an das echte Root zu übergeben. Normalerweise erscheint die Abfrage nur auf der lokalen Konsole.
`dropbear-initramfs` fügt diesem initramfs drei Dinge hinzu: den Dropbear-SSH-Server, einen Schritt zur Netzwerkeinrichtung und das Hilfsprogramm `cryptroot-unlock`. Dropbear startet vor der Passphrase-Abfrage, akzeptiert nur Public-Key-Logins mit den eingebauten Schlüsseln, und `cryptroot-unlock` reicht Ihre Passphrase an die wartende `cryptsetup`-Abfrage weiter. Nachdem das Root geöffnet ist, beendet das initramfs Dropbear, und Ihr regulärer OpenSSH-Server startet wie gewohnt.
Dateipfade unterscheiden sich je nach Version
Das Konfigurationsverzeichnis wurde mit Dropbear 2022.83 verschoben. Viele ältere Tutorials zeigen noch den alten Pfad, und ein dort abgelegter Schlüssel wird auf aktuellen Releases stillschweigend ignoriert. Prüfen Sie Ihr Release, bevor Sie Befehle kopieren.
Note · Die Optionsdatei heißt auf jedem Release `dropbear.conf` und liegt im selben Verzeichnis. Dort liegen auch die Host-Keys des initramfs (`dropbear_ed25519_host_key` und Co.), die von den OpenSSH-Host-Keys des laufenden Systems getrennt sind.
| Release | Konfigurationsverzeichnis | Schlüsseldatei |
|---|---|---|
| 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 und älter | `/etc/dropbear-initramfs/` | `/etc/dropbear-initramfs/authorized_keys` |
Einrichtung Schritt für Schritt unter Debian 12/13 und Ubuntu 24.04
- 01.Installieren Sie das Paket: `apt install dropbear-initramfs`. Eine Warnung über eine fehlende oder ungültige `authorized_keys`-Datei ist an dieser Stelle normal.
- 02.Fügen Sie Ihren öffentlichen Schlüssel, idealerweise einen eigenen Ed25519-Schlüssel, in `/etc/dropbear/initramfs/authorized_keys` ein, ein Schlüssel pro Zeile, und schränken Sie ihn so ein, dass er nur entsperren kann.
- 03.Setzen Sie die Dropbear-Optionen in `/etc/dropbear/initramfs/dropbear.conf`, einschließlich eines Nicht-Standard-Ports, damit der Host-Key des initramfs in `known_hosts` nicht mit Ihrem normalen SSH-Host-Key kollidiert.
- 04.Konfigurieren Sie das Netzwerk für das initramfs mit dem Kernel-Parameter `ip=` (statisch) oder verlassen Sie sich auf DHCP, wenn Ihr VPS-Netzwerk das unterstützt.
- 05.Bauen Sie das initramfs mit `update-initramfs -u` neu und führen Sie, falls Sie die Kernel-Kommandozeile geändert haben, `update-grub` aus.
- 06.Starten Sie mit geöffnetem Konsolenzugang als Rückfallebene neu, verbinden Sie sich dann und führen Sie `cryptroot-unlock` aus.
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 -uNetzwerkkonfiguration im initramfs
Das initramfs liest weder `/etc/network/interfaces` noch netplan oder systemd-networkd. Es nutzt den Kernel-Parameter `ip=` oder die Zeile `IP=` in `/etc/initramfs-tools/initramfs.conf`. Ist keines davon gesetzt, versucht es DHCP auf allen Interfaces — das klappt bei vielen Clouds, ist aber auf einem VPS mit statischer Zuweisung nicht garantiert.
Das Format ist `ip=<client-ip>::<gateway-ip>:<netmask>:<hostname>:<device>:off`. Verwenden Sie die Werte aus `ip -4 addr` und `ip route` im laufenden System. Der Interface-Name im initramfs ist meist derselbe vorhersagbare Name (zum Beispiel `ens3` oder `eth0`); im Zweifel lassen Sie das Feld für das Gerät leer, dann wird das erste Interface genutzt. IPv4 ist hier die verlässliche Wahl, da die IPv6-Unterstützung im Netzwerkschritt des initramfs begrenzt ist.
# /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-unlockEntsperren und Alltag
Warten Sie nach einem Neustart, bis der Server auf Port 2222 antwortet, und verbinden Sie sich dann als `root`. Mit dem erzwungenen Befehl aus dem Einrichtungsschritt startet `cryptroot-unlock` sofort und fragt nach der LUKS-Passphrase; ohne ihn landen Sie in einer BusyBox-Shell und tippen `cryptroot-unlock` selbst. Bei Erfolg schließt sich die Sitzung, das initramfs bootet weiter, und eine Minute später antwortet Ihr regulärer SSH-Server auf Port 22, gehärtet wie in der Anleitung zur SSH-Härtung.
Nutzen Sie einen separaten `known_hosts`-Eintrag für den Entsperr-Port, zum Beispiel einen Block `Host myserver-unlock` in `~/.ssh/config` mit `Port 2222` und `HostKeyAlias myserver-unlock`. Bei jedem Kernel-Update erzeugen Debian und Ubuntu das initramfs neu und behalten Ihren Dropbear-Schlüssel und Ihre Optionen bei — testen Sie nach größeren Upgrades trotzdem einen Neustart.
- ▹Connection refused: Die Netzwerkkonfiguration ist falsch; prüfen Sie die `ip=`-Werte auf der Konsole.
- ▹Host-Key-Warnung: Sie treffen unter dem normalen Alias auf den Host-Key des initramfs; nutzen Sie den separaten Alias.
- ▹`cryptroot-unlock` meldet, dass keine Geräte warten: Das System ist bereits gebootet, oder in `/etc/crypttab` fehlt der Root-Eintrag.
- ▹Schlüsseländerungen wirken nicht: Sie haben den alten Pfad `/etc/dropbear-initramfs/` bearbeitet oder `update-initramfs -u` vergessen.
Bedrohungsmodell: Was das Entsperren aus der Ferne schützt — und was nicht
LUKS mit Entsperren aus der Ferne schützt ruhende Daten. Eine ausgeschaltete Disk, ein kopiertes Disk-Image, ein ausgemustertes Laufwerk oder ein im ausgeschalteten Zustand beschlagnahmter Server gibt nur Chiffretext preis. Das ist eine echte und nützliche Garantie für einen VPS.
Es schützt einen laufenden Server nicht vor demjenigen, der den Host kontrolliert. Initramfs und Kernel in `/boot` sind unverschlüsselt, sodass jemand mit Hypervisor- oder Konsolenzugang sie so verändern kann, dass Ihre Passphrase beim nächsten Boot mitgeschnitten wird, und der Arbeitsspeicher einer laufenden VM — einschließlich des LUKS-Master-Keys — kann vom Host ausgelesen werden. Betrachten Sie das Entsperren aus der Ferne als Schutz gegen Beschlagnahme und Disk-Lecks, nicht gegen einen feindseligen Hypervisor. Auffälligkeiten beim Neustart, etwa ein geänderter Dropbear-Host-Key, sollten Sie untersuchen.
Note · Auf einem NoctisNode-VPS haben Sie vollen Root-Zugriff auf KVM mit den Images Debian 13/12 und Ubuntu 24.04, sodass dieses Setup wie beschrieben funktioniert. Die Grenze gilt hier wie überall: Verschlüsselung schützt die Disk, nicht einen laufenden Gast. Siehe No-Logs-VPS erklärt, was auf Anbieterseite aufgezeichnet wird und was nicht.
FAQ
QWo liegt die authorized_keys-Datei von dropbear-initramfs unter Debian 12?
AUnter Debian 12 und 13 sowie Ubuntu 24.04 ist es `/etc/dropbear/initramfs/authorized_keys`. Debian 11 und Ubuntu 22.04 nutzten `/etc/dropbear-initramfs/authorized_keys`. Führen Sie nach jeder Änderung `update-initramfs -u` aus.
QWas macht cryptroot-unlock?
A`cryptroot-unlock` ist ein Hilfsprogramm im initramfs, das die wartende LUKS-Passphrase-Abfrage findet und Ihre eingegebene Passphrase daran übergibt. Sobald das Gerät geöffnet ist, bootet das System weiter, und die Dropbear-Sitzung endet.
QWie ändere ich den SSH-Port von dropbear-initramfs?
ASetzen Sie `DROPBEAR_OPTIONS="-p 2222"` (plus weitere Flags) in `/etc/dropbear/initramfs/dropbear.conf`, führen Sie dann `update-initramfs -u` aus und starten Sie neu.
QIst das Entsperren von LUKS per SSH auf einem VPS sicher?
AEs schützt Daten auf einer ausgeschalteten oder kopierten Disk. Es kann nicht vor jemandem mit Hypervisor-Zugang schützen, der das unverschlüsselte initramfs verändern oder den Speicher der laufenden VM auslesen könnte.
QKann ich LUKS2 mit dropbear-initramfs nutzen?
AJa. Das Entsperren erfolgt im Linux-Userspace mit `cryptsetup`, daher funktioniert LUKS2 mit Argon2id; zu den Formatunterschieden siehe LUKS2 vs. LUKS1.