Ansible


Was ist Ansible?

Ansible ist ein kostenloses Framework, welches auf Python basiert. Es wird bei Linux-basierten Betriebssystemen genutzt, um automatisiert diese administrativ zu verwalten. Unter Ansible wird auf den zu verwaltenden Clients kein zusätzlicher Agent benötigt. Ein weiterer Vorteil bei automatisierten Management-Lösungen liegt darin, dass die Konfigurationen identisch sind, da deklarativ beschrieben wird, was zu erledigen ist, und nicht das Wie gegenüber manuell getätigten Konfigurationen sehen diese identisch aus.

Der Ansible-Host kommuniziert dann über eine gesicherte und verschlüsselte SSH-Verbindung mit den Clients:

1 Host –> SSH-Verbindung mit Public-Key auf:  –> 1 …n Clients

Was wird für Ansible benötigt?

Um Ansible sinnvoll in einer Linux-Systemlandschaft zu nutzen, wird ein sogenannter Ansible-Host benötigt. Bei den Clients muss der Open-SSH-Server installiert werden und ein entsprechender User xyz eingerichtet werden, welchem dann entsprechende sudo-Rechte zugeteilt werden. Der Username kann dabei frei gewählt werden, muss aber auf allen Systemen (Clients) vorhanden sein.

Notwendige Installation und Einrichtung auf dem Host

Wir gehen davon aus, dass auf dem Host Ubuntu bzw. Debian installiert ist und dieses System mit den Paketen aktuell gehalten wird.

Installation von Ansible auf dem Host

test@host:~$ sudo apt-get install ansible -y

Hinzufügen des Automatisierungsusers auf dem Host

Der Benutzername des Automatisierungsusers kann beliebig sein. In unserem Beispiel nennen wir ihn xyz:

test@host:~$ sudo add-user xyz -y

Einrichten eines sicheren SSH-Schlüsselpaars für diesen User auf dem Host

Der User xyz wird nun in seinem Homeverzeichnis ein sicheres SSH-Schlüsselpaar generieren.

Wichtig: Bitte bei der Erzeugung für die Entschlüsselung der Private-Keys KEIN Passwort angeben!

Wird nämlich ein Passwort angegeben, wird dann ständig nach diesem gefragt und Ansible kann seine Automatisierung nicht erfüllen.

test@host:~$ su -i xyz
xyz@host:~$ ssh-keygen -t ed25519

Nun sind unter dem Verzeichnis ~/.ssh/ zwei zusammengehörige Schlüssel generiert worden:

xyz@host:~/.ssh$ ls -la
total 64
drwx------ 2 xyz users 4096 Jan 24 18:18 .
drwx------+ 70 xyz users 4096 Mar 15 10:09 ..
-rw------- 1 xyz users 399 Nov 12 2023 id_ed25519
-rw-r--r-- 1 xyz users 93 Nov 12 2023 id_ed25519.pub
xyz@host:~/.ssh$

Schlüsselpaar – kurze Exkursion:
id_ed22519 ist der private Schlüssel! Dieser Schlüssel verbleibt auf dem Host und darf NICHT weitergegeben werden!
id_ed25519.pub ist, wie pub schon andeutet, der öffentliche (public) Schlüssel des Schlüsselpaars. Dieser Schlüssel kann auch beispielsweise im Lokalteil der Zeitung abgedruckt werden, da er öffentlich ist.

Die beiden Schlüssel (private und public) sind korrespondierend, d. h., wird ein Schlüssel der beiden gelöscht, ist das Schlüsselpaar nicht mehr funktionsfähig. Bildlich gesprochen entspricht der private Key einem Schlüssel am eigenen Schlüsselbund und der public Key dem Türschloss.

Pflegen der Datei /etc/ansible/hosts auf dem Host

In dieser Datei werden alle Clients, welche Ansible von dem Host ausgehend managen soll, eingetragen. Dabei lassen sich auch Gruppen mit eckigen Klammern bilden. In diesem Beispiel existieren 3 Gruppen: SuSE-basierte, Debian-basierte und Ubuntu-basierte Linuxsysteme. Die Auftrennung kann sinnvoll sein, da eventuell die Distributionen Ubuntu, Debian und SuSE in Ansible administrative Besonderheiten aufweisen.
Hinweis: In dieser Datei muss der korrekte Hostname des Clients eingetragen werden. Dieser ist auf einem Client unter /etc/hostname zu finden.

xyz@host:/etc/ansible $ cat hosts
[debian]
debian1
debian2
debian3

[ubuntu]
ubuntu1
ubuntu2

[suse]
suse1
suse2
xyz@host:/etc/ansible $

Wird ein neuer Client hinzugefügt, so muss dieser auch in der /etc/ansible/hosts auf dem Host nachgepflegt werden. Das Gleiche gilt natürlich auch, wenn ein Client nicht mehr existiert, d. h., er muss aus dieser Datei wieder entfernt werden.

Notwendige Installation und Einrichtung auf jedem Client

Die nachfolgenden Installationsschritte müssen pro Client durchgeführt werden.

Installation OpenSSH-Server auf jedem Client

Ansible gibt mit dem eingerichteten User xyz (in unserem Beispiel) per verschlüsselter SSH-Verbindung später Anweisungen, was auf dem System erledigt werden muss. Hierfür ist eine Open-SSH-Server-Einrichtung auf dem Client notwendig.

user@ubuntu1:~ $ sudo apt-get install openssh-server -y

Konfiguration Open-SSH-Server auf jedem Client

Der SSH-Server muss jedoch noch auf jedem Client gehärtet werden. Wir führen in unserem Beispiel folgende Härtungsmaßnahmen an der Datei /etc/ssh/sshd_config auf jedem einzelnen Client durch:

  • root-Login wird nicht erlaubt –> permit_root_login no
  • Login ist per SSH nur noch mit hinterlegtem Public-Key pro User möglich. –>  PasswordAuthentication no und ChallengeResponseAuthentication no und PubkeyAuthentication yes
  • Es darf nur der User xyz per SSH Zugriff erhalten. –> AllowUsers xyz

Danach wird der SSH-Server auf dem Client neu gestartet:

user@ubuntu1:~ $ sudo /etc/init.d/ssh restart

User xyz einrichten auf jedem Client

Nun wird der User xyz auf jedem Client eingerichtet:

user@ubuntu1:~ $ sudo add-user xyz

Kopieren des Public-Keys auf jeden Client

Als Erstes wird unter dem User xyz ein zusätzliches Verzeichnis .ssh mit den Rechten 700 auf jedem Client angelegt:

user@ubuntu1: ~$ sudo -i xyz
xyz@ubuntu1: ~$ mkdir .ssh
xyz@ubuntu1: ~$ chmod 700 .ssh

Der Public-Key id_ed25519.pub des Users xyz auf dem Host /home/xyz/.ssh/id_ed25519.pub wird nun auf jeden Client in das Verzeichnis /home/xyz/.ssh/ in die Datei authorized_keys kopiert. Die Dateirechte werden dann angepasst:

xyz@ubuntu1: ~$ cd .ssh
xyz@ubuntu1: ~$ chmod 600 authorized_keys

Test der Login-Verbindung zu jedem Client

Jetzt wird die Verbindung das 1. Mal getestet, d. h., der User xyz auf dem Host initiiert eine SSH-Verbindung zum Client. Hierbei wird das 1. Mal angefragt, ob auch der Public-Key des Clients akzeptiert wird. Dies muss mit yes bestätigt werden. Daher ist es zwingend erforderlich, dass diese initiale Verbindung manuell getätigt wird.

Bei einem erneuten SSH-Login wird diese Anfrage nicht mehr gestellt und es muss ein Login ohne Passwortanfrage erfolgen:

user@host: ~$ sudo -i xyz
xyz@host:~$ ssh xyz@ubuntu1
Linux sambapi 6.12.75-v7+ #1949 SMP Fri Mar  6 11:30:21 GMT 2026 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Mar 15 10:56:43 2026 from x.x.x.x
xyz@ubuntu1:~ $ 

Wichtig: Wird der User xyz beim SSH-Login weiterhin nach einem Passwort gefragt, so funktioniert das Public-Key-Verfahren noch nicht! Bitte hier unbedingt die Schritte des Clients erneut prüfen – insbesondere die Datei- und Verzeichnisrechte. Diese müssen unbedingt sehr stringent vergeben werden.

sudo-Rechte für den User xyz auf jedem Client erteilen

War die Testverbindung erfolgreich, so muss nur noch auf jedem Client dem User xyz entsprechende sudo-Rechte erteilt werden, damit später auch Ansible sauber administrativ mit dem Client arbeiten kann. Hierzu muss die Datei /etc/sudoers um eine Zeile entsprechend erweitert werden:

coode>xyz ALL=(ALL:ALL) NOPASSWD: ALL

Dieser Eintrag gewährt dem User xyz entsprechende sudo-Rechte auf dem Client.

Abschließender Test
Da nun alle Konfigurationsschritte für Ansible abgeschlossen sind, kann ein abschließender Test auf dem Host erfolgen:

user@host: ~$ sudo xyz -i
xyz@host: ~$ ansible all -m ping