Wer viele Server administrieren muss, kennt das Problem, dass man immer wieder die gleichen Skripte oder Befehle auf den einzelnen Hosts ausführen muss. Selbst wann man dies zeitgesteuert erledigt, muss man prüfen, ob die Änderungen erfolgreich waren. Aus genau solch einem Grund gibt es inzwischen eine Vielzahl an Automatisierungs- und Orchestrierungswerkzeugen welche einem die Konfiguration der Infrastruktur erleichtern und nebenbei eine bessere Auditierung der einzelnen Konfiguration ermöglichen. Eines dieser Programme ist Ansible, welches inzwischen zu RedHat gehört.
Dieser Artikel soll einen praktischen Einstieg in das Konfigurationsmanagement mit Ansible geben.
1. Voraussetzungen
Als Testumgebung verwende ich drei Maschinen, alle drei Maschinen laufen unter dem aktuellen Release der Linux Distribution Debian.
Hostname | Verwendung | IP-Adresse |
ansible-host | Ansible Control Node | 192.168.2.167 |
webd | Webserver (Ansible Node) | 192.168.2.168 |
ansible-node | Testnode (Ansible Node) | 192.168.2.169 |
2. Installation des Control Node
Wie immer sollten, um die aktuellste Version zu erhalten, zunächst die Paketquelle eingebunden werden:
1 2 3 4 5 | echo "deb http://ppa.launchpad.net/ansible/ansible/ubuntu bionic main" | sudo tee -a /etc/apt/sources.list sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367 sudo apt update |
Anschließend folgt dann die Installation via:
1 | sudo apt install ansible -y |
Nach der erfolgreichen Installation lassen wir uns beim ersten Start von Ansible ein paar Informationen zu Version und Ablageort der Konfigurationsdateien ausgeben;
1 | sudo ansible –version |
3. Einrichtung des SSH-Hostkeys und Verteilung an die Nodes
Damit sich der Control Node auf jedem der Clients ohne Eingabe eines Kennwortes authentifizieren kann, muss ein SSH-Zertifikat generiert werden welches im Anschluss auf den Nodes importiert wird.
Dazu erstellen wir ein Zertifikat nach aktuellen Empfehlungen unter Verwendung des Algorithmus RSA und einer Schlüssellänge von 4096 Bit, welches genügend Schutz gegen Bruteforce Angriffe bieten sollte.
1 | ssh-keygen -t rsa -b 4096 |
Das erzeugte Zertifikat kopieren wir mittels ssh-copy-id auf unsere Nodes:
1 2 3 | ssh-copy-id root@192.168.2.168 ssh-copy-id root@192.168.2.169 |
4. Erzeugen des Ansible Inventory
Beim Ansible Inventory handelt es sich um eine Datei in welcher alle Systeme stehen, welche wir mit unserem Ansible Control Node verwalten wollen.
Die Standardkonfiguration findet sich unter“ /etc/ansible/hosts“ und wird, wenn man kein anderes Inventory bei der Verwendung von Ansible immer als erstes durchsucht.
In meinen Fall möchte ich aber eine eigene Inventory Datei in meinem Home-Verzeichnis anlegen.
1 | nano $Home/hosts |
1 2 3 4 5 6 7 8 9 10 | [Webserver] webd.lab.local [Test] 192.168.2.169 |
Innerhalb der Datei habe ich die zwei Hostgruppen namens Webserver und Test angelegt.
Unter den Namen der Gruppen fügt man dann in separate Zeilen die einzelnen Hosts hinzu. So kann man zum Beispiel Nodes unterschiedlichen Updateringen zuweisen.
5. Test der Funktionalität von Ansible
Nach der Einrichtung prüfen wir ob Ansible funktionsfähig ist:
1 2 3 | sudo ansible -i ~/hosts -m ping Test sudo ansible -i ~/hosts -m ping Webserver |
Die beiden genannten Befehle sollten ein SUCCESS ausgeben.
Möchte man alle im Inventory enthaltene Server direkt mit einem Befehl ansprechen geht dies folgendermaßen:
1 | sudo ansible -i ~/hosts -m ping all |
6. Einstellungen in der Ansible Konfigurationsdatei
Sofern bei der Eingabe eines Befehls wie zum Beispiel
1 | ansible –i ~/hosts all –a “python3 –V“ |
Eine Warnung bezüglich des Python Interpreters erscheint, muss in der Ansible Konfigurationsdatei noch festgelegt werden welche Version der Programmiersprache Python von Ansible auf den Clients genutzt werden soll.
Diese liegt unter“ /etc/ansible/ansible.cfg und müsste in diesem Fall im Abschnitt „defaults“ um beispielsweise folgendes ergänzt werden:
1 2 3 | [defaults] interpreter_python = auto_silent |
Danach steht dann einer erfolgreichen Befehlsausführung nichts mehr im Weg.
Weiterführende Informationen findet man unter: https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html