Debian per Cloud-Init auf Proxmox: schnell, sauber, reproduzierbar

Ausgangslage

Für ein neues Vorhaben im Homelab brauchte ich eine weitere Debian-VM auf meinem Proxmox-Cluster. Nichts Aussergewöhnliches – aber genau bei diesen „eigentlich Routine“-Aufgaben lohnt es sich, den Prozess nochmal bewusst anzuschauen, statt einfach die x-te ISO-Installation von Hand durchzuklicken.

Problem

Eine VM klassisch per ISO aufzusetzen bedeutet: Image hochladen, VM anlegen, Installer Schritt für Schritt durchklicken, Netzwerk manuell konfigurieren, SSH-Zugang nachträglich einrichten. Funktioniert zuverlässig, kostet aber jedes Mal Zeit – und ist bei mehreren VMs, die alle nach demselben Muster aufgesetzt werden sollen, unnötig repetitiv.

Zwei Dinge wollte ich diesmal anders machen:

  • Die VM-Erstellung automatisieren, statt den Installer manuell durchzuklicken
  • Netzwerkkonfiguration, Hostname und SSH-Zugang direkt beim ersten Boot automatisch setzen lassen, statt sie danach von Hand nachzuziehen

Auflösung

1. VM per Helper-Script erstellen. Die Community-Scripts für Proxmox VE bieten für genau solche Standardfälle fertige Skripte. In der Proxmox-Shell (auf dem jeweiligen Node, nicht in einer VM) reicht ein einzeiliger Befehl, der automatisch ein aktuelles Debian-Cloud-Image herunterlädt und daraus eine VM erstellt:

bash

bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/vm/debian-vm.sh)"

Im interaktiven Dialog werden Hostname, Ziel-Node, Netzwerk-Bridge/VLAN und die Aktivierung von Cloud-Init abgefragt.

2. Cloud-Init aktivieren. Bei der Rückfrage „Configure the VM with Cloud-init?“ unbedingt mit Yes bestätigen. Cloud-Init ist der Standard-Mechanismus, mit dem sich Netzwerkkonfiguration und SSH-Keys direkt beim ersten Boot automatisch setzen lassen – ohne das würde man dieselbe Konfiguration hinterher manuell in der Konsole nachtragen müssen.

3. Netzwerk per DHCP statt statischer IP. Da im Netzwerk bereits ein DHCP-Server mit automatischer DNS-Registrierung für neue Leases läuft, muss keine IP-Adresse von Hand vergeben werden. Die VM bekommt beim ersten Boot automatisch eine Adresse und ist kurz danach unter ihrem Hostnamen im internen DNS auflösbar.

4. Nach dem ersten Boot: Grundkonfiguration.

bash

# Zeitzone und Locale setzen
timedatectl set-timezone Europe/Zurich
sed -i 's/^# de_CH.UTF-8/de_CH.UTF-8/' /etc/locale.gen
locale-gen
update-locale LANG=de_CH.UTF-8

# QEMU Guest Agent für saubere Proxmox-Integration
apt update
apt install -y qemu-guest-agent openssh-server
systemctl enable --now qemu-guest-agent

Der QEMU Guest Agent lohnt sich in jedem Fall: Ohne ihn zeigt Proxmox weder die IP-Adresse der VM im Dashboard an, noch lassen sich saubere Shutdowns direkt aus der Proxmox-Oberfläche auslösen – ohne Agent bleibt nur ein hartes Poweroff.

5. SSH-Zugriff einrichten, passend zum bestehenden Key-Management:

bash

ssh-copy-id root@<IP-der-neuen-VM>

Ein bekannter Stolperstein bei Cloud-Init-Images: SSH-Host-Keys werden mitunter bei jedem Neustart neu generiert, was jedes Mal zu Warnmeldungen über einen „geänderten Fingerprint“ führt. Der Fix dafür:

bash

cat > /etc/cloud/cloud.cfg.d/99-keep-ssh-hostkeys.cfg << 'EOF'
ssh_deletekeys: false
EOF

Lessons Learned

  • Cloud-Init-Images sind bewusst minimal. Alles, was über eine reine Basis-Installation hinausgeht, muss explizit nachinstalliert werden – das ist Absicht, kein Mangel.
  • Helper-Scripts sparen viel Zeit, ersetzen aber nicht das Verständnis dafür, was im Hintergrund passiert. Gerade bei der Cloud-Init-Abfrage lohnt sich ein bewusstes Ja, nicht ein automatisches Durchklicken.
  • Automatisierte DNS-Registrierung bei DHCP-Leases erspart viel manuelle DNS-Pflege – man sollte nur wissen, dass eine frische VM erst nach der ersten Lease-Vergabe auflösbar ist, nicht sofort nach dem Boot.
  • SSH-Host-Key-Regeneration bei Cloud-Init ist ein häufiger, aber leicht zu übersehender Stolperstein, der sich mit einer einzigen Konfigurationsdatei dauerhaft beheben lässt.

Fazit

Für eine neue Debian-VM auf Proxmox ist der Weg über ein Cloud-Init-Image und ein Community-Helper-Script deutlich schneller und reproduzierbarer als eine klassische ISO-Installation – ohne dabei an Kontrolle einzubüssen. Der anfängliche Zeitaufwand für Zeitzone, Locale, Guest Agent und SSH-Konfiguration bleibt zwar bestehen, lässt sich aber leicht als wiederholbares Rezept für die nächste VM übernehmen.

Schreibe einen Kommentar