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.

HostnameVerwendungIP-Adresse
ansible-hostAnsible Control Node192.168.2.167
webdWebserver (Ansible Node)192.168.2.168
ansible-nodeTestnode  (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:

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:

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;

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.

ssh-keygen -t rsa -b 4096

Das erzeugte Zertifikat kopieren wir mittels ssh-copy-id auf unsere Nodes:

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.

nano $Home/hosts
[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:

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:

sudo ansible -i ~/hosts -m ping all

 

6. Einstellungen in der Ansible Konfigurationsdatei

Sofern bei der Eingabe eines Befehls wie zum Beispiel

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:

[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