Get Rewarded! We will reward you with up to €50 credit on your account for every tutorial that you write and we publish!

Anleitung zur Installation eines voll verschluesselten AlmaLinux 10

profile picture
Author
Nils
Published
2025-03-12
Time to read
8 minutes reading time

Einleitung

Das installimage Skript in dem Hetzner Rescue System bietet eine einfache Möglichkeit, verschiedene Linux-Distributionen zu installieren.

Dieses Tutorial zeigt, wie man mit installimage ein verschlüsseltes AlmaLinux 10 installiert und eine Entschlüsselung per SSH (dracut-sshd) im initramfs hinzufügt, das in einer separaten /boot-Partition gespeichert ist. Das Tutorial basiert auf der Anleitung für FDE unter Ubuntu.

Dieses Tutorial verwendet zwei Beispieldateien:

Datei Beschreibung
/tmp/setup.conf Eine Konfigurationsdatei, die AlmaLinux 10 installiert und eine verschlüsselte root-Partition einrichtet.
/tmp/post-install.sh Ein Bash-Skript, das auf dem System ausgeführt wird, sobald der Installationsprozess beendet ist. Das Skript richtet dracut-sshd ein, damit du dich während dem Boot damit verbinden und die verschlüsselte root-Partition entschlüsseln kannst.

Voraussetzungen

  • Hetzner-Konto
  • Server welcher in das Rescue-System gebootet ist
  • Öffentlicher RSA, ECDSA oder ED25519 SSH-Schlüssel
  • Keine privaten Netzwerke über die Hetzner Cloud an den Servern angeschlossen

Hinweis: Diese Anleitung ist explizit nur für AlmaLinux 10 geschrieben. Es könnte sein, dass diese nicht auf anderen Distributionen funktioniert.

Schritt 1 - Erstellen oder Kopieren des öffentlichen SSH-Schlüssels

Es wird ein SSH-Schlüssel benötigt, um das verschlüsselte System während dem Boot aus der Ferne entsperren zu können. Dieser Schlüssel wird auch für die spätere Anmeldung am gebooteten System verwendet.

Wenn du keinen solchen Schlüssel hast, musst du einen auf deinem lokalen Gerät generieren. Wir empfehlen die Nutzung von ED25519 oder ECDSA Schlüsseln

Um z. B. einen ED25519-Schlüssel zu erzeugen, führe folgenden Befehl auf dem lokalen Gerät aus:

ssh-keygen -t ed25519

Speichere den öffentlichen Key des SSH-Key-Paares in der /tmp/authorized_keys-Datei auf dem Server. Der Server sollte bereits im Rescue System sein. Erstelle die Datei entweder direkt auf dem Server oder kopieren den öffentlichen Key vom lokalen Gerät mit scp:

scp ~/.ssh/id_ed25519.pub root@<your-host>:/tmp/authorized_keys

Schritt 2 - Erstellen oder Kopieren der installimage-Konfigurationsdatei

Wenn das installimage Skript auf einem Server im Rescue-System ohne Optionen aufgerufen wird, startet es im interaktiven Modus. Man muss ein Distributionsimage auswählen und anschließend wird ein Editor geöffnet. Nach dem Verlassen des Editors, wird die Installation fortgesetzt und die entsprechende Konfiguration wird als /installimage.conf im installierten System gespeichert.

Wenn das installimage Skript auf einem Server im Rescue-System mit Optionen aufgerufen wird, startet es im automatischen Modus — das heißt die Installation wird ohne interaktive Prompts ausgeführt. Folgend wird erklärt, wie man eine eigene Konfigurationsdatei erstellt und diese an den Befehl installimage übergibt, um sie während des automatischen Installationsprozesses zu verwenden.

Erstelle eine neue Konfigurationsdatei /tmp/setup.conf und füge folgenden Inhalt ein:

Hinweis: Ersetze secret durch ein sicheres Passwort und passe die Laufwerksnamen und die Partitionierung nach Bedarf an.

CRYPTPASSWORD secret
DRIVE1 /dev/sda
BOOTLOADER grub
HOSTNAME host.example.com
PART /boot/efi esp 256M
PART /boot ext4 1G
PART /     ext4 all crypt
IMAGE /root/images/Alma-1001-amd64-base.tar.gz
SSHKEYS_URL /tmp/authorized_keys

Hinweis: Es sollte auch RockyLinux 10 (Rocky-1001-amd64-base.tar.gz) oder CentOS Stream 10 (CentOS-1000-stream-amd64-base.tar.gz) funktionieren — allerdings ohne Garantie.

Diese Konfiguration installiert Ubuntu auf einem einzelnen verschlüsselten Laufwerk (/dev/sda) mit einer separaten unverschlüsselten /boot Partition, das für die Entschlüsselung benötigt wird.


Beispiel für zwei Laufwerke (RAID1)
Partition Einhängepunkt RAID Device RAID Level
sda1 sdb1 /boot/efi md0 1
sda2 sdb2 /boot md1 1
sda3 sdb3 / md2 1
CRYPTPASSWORD secret
DRIVE1 /dev/sda
DRIVE2 /dev/sdb
SWRAID 1
SWRAIDLEVEL 1
BOOTLOADER grub
HOSTNAME host.example.com
PART /boot/efi esp 256M
PART /boot ext4 1G
PART /     ext4 all crypt
IMAGE /root/images/Alma-1001-amd64-base.tar.gz
SSHKEYS_URL /tmp/authorized_keys

Beispiel für vier Laufwerke (RAID10)
Partition Einhängepunkt RAID Device RAID Level
sda1 sdb1 sdc1 sdd1 /boot/efi md0 1
sda2 sdb2 sdc2 sdd2 /boot md1 1
sda3 sdb3 sdc3 sdd3 / md2 10
CRYPTPASSWORD secret
DRIVE1 /dev/sda
DRIVE2 /dev/sdb
DRIVE3 /dev/sdc
DRIVE4 /dev/sdd
SWRAID 1
SWRAIDLEVEL 10
BOOTLOADER grub
HOSTNAME host.example.com
PART /boot/efi esp 256M
PART /boot ext4 1G
PART /     ext4 all crypt
IMAGE /root/images/Alma-1001-amd64-base.tar.gz
SSHKEYS_URL /tmp/authorized_keys

Beispiel für Volume Group (VG)
CRYPTPASSWORD secret
DRIVE1 /dev/sda
DRIVE2 /dev/sdb
SWRAID 1
SWRAIDLEVEL 1
BOOTLOADER grub
HOSTNAME host.example.com
PART /boot/efi esp 256M
PART /boot ext4 1G
PART lvm vg0 all crypt
LV vg0 root / ext4 50G
LV vg0 home /home ext4 1500G
IMAGE /root/images/Alma-1001-amd64-base.tar.gz
SSHKEYS_URL /tmp/authorized_keys

Schritt 3 - Post-Installations-Skript erstellen oder kopieren

Um die verschlüsselte Partition über SSH zu entsperren, müssen wir einen SSH Server installieren und zum initramfs hinzufügen, das auf der unverschlüsselten /boot-Partition gespeichert ist.

Um diese zusätzlichen Schritte ausführen zu können, benötigen wir ein Post-Install-Skript für das installimage Skript.

Erstelle im Rescue-System eine Datei /tmp/post-install.sh mit folgendem Inhalt:

#!/bin/bash

add_initramfs_network() {
  mainif="$(ip --json a show up | jq -r 'del(.[] | select(.ifname == "lo")) | .[0]')" # main network interface
  ip="$(echo $mainif | jq -r '.addr_info[0].local')" # main IP
  gw="$(ip --json n | jq -r '.[0].dst')" # gateway
  nn="$(echo $mainif | jq -r '.altnames[0]')" # interface name

  echo -e "kernel_cmdline=\"rd.neednet=1 ip=$ip::$gw:255.255.255.255::$nn:none:185.12.64.1:185.12.64.2:213.239.239.164\"\nadd_dracutmodules+=\" network \"" > /etc/dracut.conf.d/90-network.conf
}

# Update system
dnf check-update >/dev/null
dnf -y install epel-release # install EPEL repo
dnf -y install jq dracut-network dracut-sshd

# Add static network config into initramfs
add_initramfs_network

# Change the port
echo "Port 2222" >> /usr/lib/dracut/modules.d/46sshd/sshd_config
dracut -f -v '' "$(ls /lib/modules)"

Wichtig: Das Post-Installations-Skript muss ausführbar gemacht werden:

chmod +x /tmp/post-install.sh

Schritt 4 - Installation starten

Prüfe vor dem Start der Installation nochmals den Inhalt der folgenden Dateien:

Datei Prüfen
/tmp/authorized_keys Dein öffentlicher SSH-Schlüssel
/tmp/setup.conf Die Installationskonfiguration
/tmp/post-install.sh Ist ausführbar und enthält das Post-Installations-Skript

Jetzt kann die Installation mit dem folgenden Befehl gestartet werden:

installimage -a -c /tmp/setup.conf -x /tmp/post-install.sh

Warte, bis die Installation abgeschlossen ist, und prüfe die debug.txt-Datei auf eventuelle Fehler.

Schritt 5 - Installiertes System booten

Nachdem die Installation abgeschlossen ist und alle Fehler behoben wurden, kann reboot ausgeführt werden, um den Server neu zu starten und das neu installierte System zu booten. Man kann den Boot-Vorgang beobachten, wenn eine KVM angeschlossen ist oder über die VNC-Konsole in Hetzner Console.

Nach einiger Zeit sollte der Server auf einen Ping reagieren. Über den Default-SSH-Port 22 sollte ein Login nicht möglich sein, da die root-Partition noch verschlüsselt ist. Verbinde dich stattdessen über Port 2222 und führe systemd-tty-ask-password-agent aus, um die verschlüsselte(n) Partition(en) zu entsperren. Wenn du dich mit dem Server verbindest, nutze den privaten Key, der zum öffentlichen Key gehört, den du in /tmp/authorized_keys angegeben hast.

ssh -p 2222 root@<your-host>

Beispiel:

$ ssh -p 2222 root@<your-host>

Welcome to the early boot SSH environment. You may type

    systemd-tty-ask-password-agent

(or press "arrow up") to unlock your disks.

This shell will terminate automatically a few seconds after the
unlocking process has succeeded and when the boot proceeds.

initramfs-ssh:/root# systemd-tty-ask-password-agent
:closed_lock_with_key: Please enter passphrase for disk SAMSUNG MZVL2512HCJQ-00B00 (luks-7dfda334-4593-40af-b54e-29b9890abaf7): (press TAB for no echo)

Gib das Passwort an, das du zuvor in /tmp/setup.conf für CRYPTPASSWORD festgelegt hast. Wenn das Passwort korrekt ist, wird der Bootvorgang fortgesetzt und die temporäre SSH-Sitzung wird automatisch beendet.

Nach ein paar Sekunden kannst du dich über den SSH-Port 22 mit dem Server verbinden.

ssh -p 22 root@<your-host>
License: MIT
Want to contribute?

Get Rewarded: Get up to €50 in credit! Be a part of the community and contribute. Do it for the money. Do it for the bragging rights. And do it to teach others!

Report Issue

Discover our

Dedicated Servers

Get €20/$20 free credit!

Valid until: 31 December 2026 Valid for: 3 months and only for new customers
Configure now
Want to contribute?

Get Rewarded: Get up to €50 credit on your account for every tutorial you write and we publish!

Find out more