cloud-init template für bereitstellung in whmcs

LucasKer

New Member
Dec 28, 2025
5
0
1
Hi bin gerade dabei für WHMCS cloud-init Templates fertig zu machen damit die Bereitstellung über whmcs autonom funktioniert.

Folgendes hab ich gemacht:
VM in Proxmox erstellt:
qm create 10000 \
--name debian13-cloudinit \
--memory 2048 \
--cores 2 \
--net0 virtio,bridge=vmbr0 \
--scsihw virtio-scsi-pci

Debian 13 cloud Image heruntergeladen und importiert
cd /root/template-iso
wget https://cloud.debian.org/images/cloud/trixie/latest/debian-13-genericcloud-amd64.qcow2

qm importdisk 10000 debian-13-genericcloud-amd64.qcow2 local-zfs
qm set 10000 --scsi0 local-zfs:vm-10000-disk-0
qm set 10000 --boot order=scsi0

Cloud-Init Drive hinzugefügt
qm set 10000 --ide2 local-zfs:cloudinit
qm set 10000 --ipconfig0 ip=dhcp
qm set 10000 --nameserver 8.8.8.8
qm set 10000 --ciuser root
qm set 10000 --ciupgrade 1
qm set 10000 --agent enabled=1



qm template 10000




Muss noch was ergänzt werden, weil in der GUI von Proxmox kann ich über Konsole gehen da steht dann "starting serial terminal on interface serial0", dass bleibt auch da stehen mehr nicht. Wenn ich Enter drücke komme ich zum Login, der Login selbst funktioniert auch. In der sshd_config ist passwort login auch auf yes

Die Bereistellung über WHMCS funktioniert auch, nach dem die VM bereitgestellt wurde steht unter IP-Konfiguration auch die IP die zugewiesen wurde passwort wurde auhc gesetzt nur ich komme nicht über SSH rein. "Permission denied" wenn ich über Terminal versuche reinzukommen. Hab ich bei der cloud-init template erstellung was vergessen? Ich muss mehrere cloud-init templates nachher haben CentOS, Ubuntu oder Debian
 
Hallo @LucasKer,

das "Permission denied" bei SSH kommt fast sicher daher, dass Debian Cloud-Images standardmäßig PermitRootLogin auf prohibit-password setzen. Dein --ciuser root setzt zwar das Passwort, aber SSH blockt den Root-Login per Passwort trotzdem.

Prüf das über die Konsole:
Code:
grep -ri PermitRootLogin /etc/ssh/sshd_config /etc/ssh/sshd_config.d/

Da wird vermutlich prohibit-password stehen. Schau auch in /etc/ssh/sshd_config.d/ — Debian Cloud-Images legen dort gerne eigene Dateien ab, die die Hauptconfig überschreiben.

Empfohlene Lösung: SSH-Keys statt Passwort verwenden. Vor dem Templaten:
Code:
qm set 10000 --sshkeys /root/.ssh/authorized_keys

Falls du für WHMCS zwingend Passwort-Login brauchst, musst du das Image vor dem Templaten anpassen. VM einmal starten und per Konsole:
Code:
echo "PermitRootLogin yes" > /etc/ssh/sshd_config.d/99-allow-root.conf
systemctl restart sshd
Dann VM wieder stoppen und erst danach qm template 10000.

Alternativ kannst du das per cicustom mit einem eigenen Cloud-Init-Config lösen, das wäre sauberer wenn du mehrere Templates baust.

Zum Konsolen-Thema: Die Meldung "starting serial terminal on interface serial0" kommt, weil kein Serial-Port konfiguriert ist. Entweder seriell hinzufügen:
Code:
qm set 10000 --serial0 socket --vga serial0
Oder einfach über noVNC/xterm.js auf die VM zugreifen — da funktioniert der Login ja bereits.
 
  • Like
Reactions: LucasKer
PermitRootLogin ist auf yes das hatte ich schon geprüft, aber SSH-Keys würde in dem Fall ja nichts bringen oder sehe ich das Falsch? Weil das ja über WHMCS bereitgestellt wird und für die IP und Passwort Vergabe ist WHMCS zuständig

Waren die Befehle oben alle richtig für die cloudinit template Erstellung oder hast du für mich einen bessere Schritt für Schritt Ablauf wie ich ein sauberes/cleanes cloud init template auf einem frisch installierten Proxmox Host mit ZFS konfiguriere und erstelle. Damit ich die Schritte mal durchgehen kann und es ausprobieren kann dann sollte es im Regelfall ja funktionieren. Weil mit meiner Vorgehensweise scheint es ja nicht sauber zu funktionieren. Danke für die Hilfe!
 
Wenn PermitRootLogin yes schon gesetzt ist, prüf auch ob PasswordAuthentication wirklich auf yes steht — Debian Cloud-Images setzen das teilweise separat auf no:

Code:
grep -ri PasswordAuthentication /etc/ssh/sshd_config /etc/ssh/sshd_config.d/

Außerdem prüf, ob das Passwort von WHMCS tatsächlich ankommt:

Code:
passwd -S root

Wenn da L (locked) steht, ist der Account gesperrt trotz gesetztem Passwort.

Hier ein sauberer Ablauf für ein Debian Cloud-Init Template auf ZFS:

Code:
# 1. Image herunterladen
wget -P /root/template-iso https://cloud.debian.org/images/cloud/trixie/latest/debian-13-genericcloud-amd64.qcow2

# 2. VM erstellen
qm create 10000 --name debian13-cloudinit --memory 2048 --cores 2 \
  --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci \
  --serial0 socket --vga serial0 --ostype l26

# 3. Disk importieren und zuweisen
qm importdisk 10000 /root/template-iso/debian-13-genericcloud-amd64.qcow2 local-zfs
qm set 10000 --scsi0 local-zfs:vm-10000-disk-0,discard=on
qm set 10000 --boot order=scsi0

# 4. Disk vergrößern (Cloud-Images sind nur ~2GB)
qm disk resize 10000 scsi0 20G

# 5. Cloud-Init Drive
qm set 10000 --ide2 local-zfs:cloudinit

# 6. Cloud-Init Defaults
qm set 10000 --ciuser root --ciupgrade 1 --agent enabled=1
qm set 10000 --ipconfig0 ip=dhcp

# 7. VM starten und qemu-guest-agent + SSH-Config anpassen
qm start 10000

Dann über die serielle Konsole (qm terminal 10000) einloggen und:

Code:
# Guest-Agent installieren (wichtig für WHMCS IP-Erkennung)
apt-get update && apt-get install -y qemu-guest-agent
systemctl enable qemu-guest-agent

# SSH Passwort-Login sicherstellen
echo "PermitRootLogin yes" > /etc/ssh/sshd_config.d/99-allow-root.conf
echo "PasswordAuthentication yes" > /etc/ssh/sshd_config.d/99-allow-password.conf
systemctl restart sshd

# Cloud-Init für nächsten Lauf zurücksetzen
cloud-init clean

# Maschine herunterfahren
poweroff

Danach das Template erstellen:

Code:
qm template 10000

Wichtig: Vor dem cloud-init clean nicht vergessen — sonst überspringt Cloud-Init beim nächsten Clone die Konfiguration, weil es denkt, es ist schon gelaufen.

Für CentOS/Ubuntu gleiches Vorgehen, nur anderes Cloud-Image und bei CentOS yum statt apt-get für den Guest-Agent.