Infrastrukturmanagement mit Ansible
Dieses Handbuch beschreibt den Aufbau eines automatisierten Monitoring- und Wartungssystems für eine heterogene Server-Flotte (Proxmox-Hosts, KeyHelp-VMs und Docker-Infrastrukturen) unter Verwendung eines zentralen, isolierten Management-LXC.
Das Konzept der „isolierten Zentrale“
Bei Ansible gibt es keinen "Agenten", der auf den Zielservern installiert werden muss. Alles läuft über eine einzige Zentrale (auch Control Node genannt).
Aus Sicherheitsgründen sollte diese Zentrale isoliert sein:
-
Keine offenen Ports nach außen: Die Zentrale benötigt keine offenen Ports (wie HTTP oder externe SSH-Zugänge) im Internet. Sie initiiert Verbindungen immer nur aktiv nach draußen zu den Zielservern.
-
Erreichbarkeit: Du verwaltest die Zentrale entweder lokal in deinem Heimnetzwerk (z. B. als LXC-Container auf einem Proxmox-Server) oder greifst von außen ausschließlich über ein sicheres VPN (wie WireGuard) darauf zu.
Installation von Ansible auf der Zentrale
Logge dich auf deinem ausgewählten Linux-Server (z. B. ein frisches Debian oder Ubuntu) ein, der als deine Zentrale dienen soll.
# 1. Systempakete aktualisieren
sudo apt update && sudo apt upgrade -y
# 2. Benötigte Software-Abhängigkeiten installieren
sudo apt install -y software-properties-common git curl openssh-client
# 3. Ansible installieren
sudo apt install -y ansible
Um zu überprüfen, ob die Installation erfolgreich war, kannst du die Version abfragen:
ansible --version
SSH-Schlüsselpaare erstellen und verteilen
Ansible steuert deine Server über SSH. Damit das vollautomatisch und ohne lästige Passworteingaben funktioniert, nutzen wir kryptografische SSH-Schlüssel (SSH-Keys).
Schritt 1: SSH-Key auf der Zentrale generieren
Führe diesen Befehl auf deiner Ansible-Zentrale aus. Wir nutzen den modernen und extrem sicheren ED25519-Algorithmus.
ssh-keygen -t ed25519 -C "ansible-zentrale"
-
Wenn du nach dem Speicherort gefragt wirst, drücke einfach Enter (Standard:
~/.ssh/id_ed25519). -
Wenn du nach einer Passphrase gefragt wirst, drücke ebenfalls zweimal Enter (leer lassen). Da Ansible nachts unbeaufsichtigt per Cronjob laufen soll, darf der Schlüssel nicht durch ein zusätzliches Passwort blockiert sein.
Schritt 2: Den öffentlichen Schlüssel auf die Zielserver verteilen
Nun musst du der Zentrale sprichwörtlich die "Erlaubnis" erteilen, sich auf deinen anderen Servern einzuloggen. Dazu kopieren wir den öffentlichen Teil des Schlüssels (id_ed25519.pub) auf deine Zielserver.
Wiederhole diesen Befehl für jeden deiner Server (ersetze die IP und den Benutzernamen entsprechend):
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@192.168.1.100
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@192.168.1.101
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@192.168.1.102
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@192.168.1.103
Hinweis: Bei diesem Befehl musst du einmalig das echte Passwort des Zielservers eingeben.
Den passwortlosen Login testen
Prüfe nun, ob du dich von der Zentrale aus ohne Passwort auf den Servern einloggen kannst:
ssh root@192.168.1.100
Wenn du direkt auf der Konsole des Zielservers landest, ohne nach einem Passwort gefragt zu werden, war die Einrichtung erfolgreich! Tippe exit, um zur Zentrale zurückzukehren.
Das erste Ansible-Projekt anlegen
Wir legen nun eine saubere Ordnerstruktur an, in der deine Playbooks und Zugangsdaten sicher aufgehoben sind.
# Projektordner erstellen und hineinwechseln
mkdir -p ~/ansible-inframanagement
cd ~/ansible-inframanagement
Die Inventardatei (hosts) anlegen
Ansible muss wissen, welche Server es überhaupt verwalten darf. Dazu erstellen wir eine Inventardatei namens hosts
nano hosts
[docker_hosts]
192.168.1.100
192.168.1.101
192.168.1.102
192.168.1.103
[mailserver]
192.168.1.104
Speichern mit Strg+O, Bestätigen mit Enter und Schließen mit Strg+X
Der erste „Ping“-Test
Jetzt schlagen wir die Brücke. Wir testen mit einem einfachen Befehl (einem sogenannten Ad-hoc-Befehl), ob Ansible alle Server in deiner Liste über den SSH-Key erreichen kann.
ansible all -i hosts -m ping
Wenn alles korrekt eingerichtet ist, antworten dir deine Server in der Konsole mit einem grünen oder gelben "ping": "pong":
192.168.1.100 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
Wie es jetzt weitergeht
Deine isolierte Ansible-Zentrale steht, die Schlüssel sind sicher verteilt und der erste Verbindungstest war erfolgreich.
Jetzt kannst du die Playbooks aus dem vorherigen Kapitel (wie das Mailcow-Blocklist-Update oder den Docker-Container-Wächter) in diesem Ordner (~/ansible-inframanagement) als .yaml-Dateien abspeichern und mit folgendem Befehl ausführen:
ansible-playbook -i hosts DEIN_PLAYBOOK.yaml