Ansible Anleitung · 8 min read · Dec 19, 2025

Ansible auf Ubuntu 20.04 installieren und konfigurieren

Ansible ist ein sehr beliebtes Konfigurationsmanagement-Tool, das entwickelt wurde, um den Prozess der Steuerung einer großen Anzahl von Servern zu optimieren. Sie können so viele Server steuern und Prozesse gleichzeitig von einem einzelnen Knoten aus ausführen.

Ansible erfordert keine spezielle Software, die auf den Serverknoten installiert werden muss, und kann sie über SSH steuern.

In diesem Leitfaden lernen wir, wie man Ansible auf einem Ubuntu 20.04-Server installiert und konfiguriert.

Voraussetzungen

  • Zwei oder mehr Ubuntu 20.04-basierte Serversysteme mit installiertem OpenSSH-Server.
  • Sowohl der Server als auch die Knoten sind über öffentliche IP-Adressen zugänglich.
  • Ein Nicht-Root-Benutzer mit Sudo-Rechten, der auf dem Ansible-Server eingerichtet ist, und ein Root-Benutzer mit einem Passwort, das auf den Ansible-Clients eingerichtet ist.

Ansible installieren

Das offizielle Repository von Ansible unterstützt Ubuntu 20.04 aufgrund eines Fehlers in der Python-Bibliothek von Ubuntu zum Zeitpunkt des Schreibens dieses Tutorials nicht.

Glücklicherweise wird Ubuntu mit Ansible 2.9 ausgeliefert, das wir installieren werden. Führen Sie den folgenden Befehl aus, um Ansible zu installieren.

$ sudo apt install ansible -y

Testen Sie Ihre Installation, indem Sie den folgenden Befehl ausführen.

$ ansible --version
ansible 2.9.6
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/username/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.8.5 (default, Jan 27 2021, 15:41:15) [GCC 9.3.0]

Inventar-Datei einrichten

Um sich mit mehreren Hosts verbinden zu können, benötigen Sie eine Datei, die die Details der Knoten aufzeichnet. Diese Datei wird als Inventar-Datei bezeichnet.

Je nachdem, wie viele Server Sie steuern möchten, ermöglicht die Inventar-Datei von Ansible auch, sie in Gruppen und Untergruppen anzuordnen. Sie können auch benutzerdefinierte Variablen festlegen, die für ausgewählte Hosts oder Gruppen gelten, die dann beim Übermitteln der Anweisungen weiterverwendet werden können.

Ansible wird mit einer Standard-Inventar-Datei geliefert, die unter /etc/ansible/hosts verfügbar ist. Öffnen Sie sie mit dem Nano-Editor.

$ sudo nano /etc/ansible/hosts

Fügen Sie den folgenden Code am Ende der Datei ein.

[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113

[all:vars]
ansible_python_interpreter=/usr/bin/python3

Der Abschnitt servers definiert die Liste der Knoten, mit denen Sie sich verbinden möchten. Sie können so viele Gruppen erstellen, um Server in mehreren Gruppen anzuordnen.

Die Gruppe all:vars setzt den Parameter ansible_python_interpreter für alle Hosts im Inventar. Sie stellt sicher, dass Ansible die Python 3-Ausführungsdatei anstelle von Python 2 verwendet, das in den neuesten Ubuntu-Versionen entfernt wurde.

Wenn Sie fertig sind, speichern und schließen Sie die Datei, indem Sie CTRL+X und dann Y und ENTER drücken, um Ihre Änderungen zu bestätigen.

Hinweis: Sie können auch Ihre eigene Inventar-Datei an einem beliebigen Ort Ihrer Wahl erstellen, die Sie dann mit dem -i-Parameter beim Ausführen von Ansible-Befehlen übergeben können.

Sie können Ihre Inventarliste mit dem folgenden Befehl überprüfen.

$ ansible-inventory --list -y
all:
  children:
    servers:
      hosts:
        server1:
          ansible_host: 203.0.113.111
          ansible_python_interpreter: /usr/bin/python3
        server2:
          ansible_host: 203.0.113.112
          ansible_python_interpreter: /usr/bin/python3
        server3:
          ansible_host: 203.0.113.113
          ansible_python_interpreter: /usr/bin/python3
    ungrouped: {}

Server in Gruppen und Untergruppen organisieren

Dies ist ein nützlicher Tipp, wenn Sie viele Server haben, wobei einige Server spezifische Funktionen ausführen. Zum Beispiel können Sie diese Methode verwenden, um Webserver und Datenbankserver separat zu gruppieren. Sie können sogar einen Host Teil mehrerer Gruppen machen. Um dies zu erreichen, sollte Ihre Inventar-Datei ungefähr wie folgt aussehen.

[webservers]
203.0.113.111
203.0.113.112

[dbservers]
203.0.113.113
server_hostname

[development]
203.0.113.111
203.0.113.113

[production]
203.0.113.112
server_hostname

SSH-Schlüssel einrichten

Damit Ansible sich mit den Servern verbinden kann, müssen Sie SSH-Schlüssel zwischen Ihrem Ansible-Server und den in der Inventar-Datei angegebenen Hosts konfigurieren. Dies funktioniert nur, wenn die Ansible-Clients keinen öffentlichen Schlüssel aktiviert haben und ein Root-Konto mit einem Passwort aktiviert ist.

Befolgen Sie die folgenden Schritte, um einen SSH-Schlüssel für Ansible und seine Knoten zu erstellen und einzurichten.

Erstellen Sie den Schlüssel für Ansible.

$ ssh-keygen -t rsa -b 4096 -C "Ansible key"

Kopieren Sie den öffentlichen Schlüssel auf Ihre Konten auf den Remote-Servern. Dazu verwenden wir den Befehl ssh-copy-id.

$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]

Das ist alles. Jetzt sollte Ansible in der Lage sein, mit Ihren Servern zu kommunizieren.

SSH-Schlüssel auf Knoten mit vorhandenem öffentlichem Schlüssel einrichten

Wenn die Clients bereits öffentliche Schlüssel aktiviert haben, müssen Sie bestimmte zusätzliche Schritte befolgen. Dazu müssen Sie einen neuen Benutzer erstellen, der nur von Ansible auf jedem Knotenserver zugänglich ist. Dieser Benutzer hat Sudo-Rechte, die ohne Passwort zugänglich sind, und kann nur von Ihrem Ansible-Server aus aufgerufen werden.

Um einen ansible-Benutzer zu erstellen, führen Sie den folgenden Befehl aus.

$ sudo adduser ansible

Wählen Sie ein starkes Passwort und lassen Sie alle anderen Felder leer.

Konfigurieren Sie nun den passwortlosen Sudo-Zugriff für diesen Benutzer mit dem folgenden Befehl.

$ echo "ansible ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ansible

Jetzt, da Sie den neuen Benutzer hinzugefügt und konfiguriert haben, können Sie den SSH-Schlüssel von Ihrem Ansible-Server auf den Knotenserver mit dem folgenden Befehl kopieren.

$ ssh-copy-id [email protected]

Sie werden nach dem Passwort für den Ansible-Benutzer gefragt. Geben Sie es ein, und der SSH-Schlüssel wird kopiert.

Als Nächstes deaktivieren Sie die passwortbasierte Anmeldung für den ansible-Benutzer auf dem Knotenserver.

$ sudo usermod -L ansible

Jetzt ist Ihr Knotenserver nur vom Ansible-Server aus zugänglich, da nur dieser Server den öffentlichen Schlüssel dafür hat, und Sie können ihn nicht direkt mit Sudo-Rechten auf dem Knotenserver verwenden, da die Passwortanmeldung deaktiviert ist.

Sie müssen diese Schritte für jeden Knotenserver wiederholen. Ersetzen Sie auch den root-Benutzer durch den ansible-Benutzer in diesem Tutorial.

Verbindung testen

Nachdem Sie die Inventar-Datei und die SSH-Schlüssel eingerichtet haben, sollten wir überprüfen, ob Ansible in der Lage ist, sich mit den Servern zu verbinden.

Geben Sie den folgenden Befehl ein, um die Verbindung zu überprüfen. Dieser Befehl testet die Verbindung zu allen Servern aus der Inventar-Datei.

$ ansible all -m ping -u root

Dieser Befehl verwendet das Ping-Modul von Ansible, um einen Konnektivitätstest auf allen Servern durchzuführen. Sie sollten eine Ausgabe wie die folgende erhalten.

server1 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
server2 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
server3 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

Wenn Sie Ansible zum ersten Mal verwenden, werden Sie aufgefordert, die Authentizität aller Server zu bestätigen. Wenn Sie dazu aufgefordert werden, geben Sie yes ein und drücken Sie ENTER, um Ihre Änderungen zu bestätigen.

Führen Sie einige grundlegende Befehle aus

Lassen Sie uns einige grundlegende Befehle auf den Servern mit Ansible ausführen. Um einen Befehl auf dem Server auszuführen, wird das folgende Format verwendet.

$ ansible all -a "command" -u 

Überprüfen Sie die Festplattennutzung

Zuerst lassen Sie uns die Festplattennutzung auf allen unseren Servern überprüfen.

$ ansible all -a "df -h" -u root
server1 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
udev            3.9G     0  3.9G   0% /dev
tmpfs           798M  624K  798M   1% /run
/dev/vda1       155G  2.3G  153G   2% /
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/vda15      105M  3.6M  101M   4% /boot/efi
tmpfs           798M     0  798M   0% /run/user/0

server2 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
udev            2.0G     0  2.0G   0% /dev
tmpfs           395M  608K  394M   1% /run
/dev/vda1        78G  2.2G   76G   3% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/vda15      105M  3.6M  101M   4% /boot/efi
tmpfs           395M     0  395M   0% /run/user/0

Zielgerichtete Einzelhosts und Gruppen

Bis jetzt haben wir Befehle auf allen Remote-Servern gleichzeitig ausgeführt. Aber das ist nicht immer der Fall. Um einen Befehl nur auf einem Server auszuführen, sollten Sie das folgende Format verwenden.

$ ansible server1 -a "uptime" -u root
server1 | CHANGED | rc=0 >>
 21:38:26 up 11 min,  2 users,  load average: 0.00, 0.20, 0.19

Der obige Befehl überprüft die Betriebszeit auf server1 aus der Inventargruppe.

Sie können auch mehrere Server mit dem folgenden Format anvisieren.

$ ansible server1:server2 -m ping -u root

Sie können auch Gruppen oder Untergruppen direkt aus der Inventar-Datei anvisieren.

$ ansible groupname -m ping -u 

Alle Server aktualisieren

Für dieses Tutorial gehen wir davon aus, dass alle Remote-Server Debian oder Ubuntu OS ausführen.

Führen Sie den folgenden Befehl aus, um die Software auf allen Ihren Servern zu aktualisieren.

$ ansible all -m apt -a "update_cache=yes upgrade=yes" -u root

Der Parameter -m definiert das Modul, das Ansible ausführen soll. -a bezieht sich auf die Argumente oder Befehle für das zugehörige Modul. Hier verwenden wir das apt-Modul von Ansible, um Server zu aktualisieren, genau wie wir das ping-Modul in unserem letzten Beispiel verwendet haben. update_cache aktualisiert den APT-Cache auf dem Server und upgrade=yes sagt Ansible, dass der Befehl apt upgrade ausgeführt werden soll.

Um Ihre CentOS-Server zu aktualisieren, können Sie denselben Befehl verwenden, indem Sie apt durch yum ersetzen, und für Fedora-Server können Sie apt durch dnf ersetzen.

Wenn Sie den ansible-Benutzer wie oben dokumentiert verwenden, müssen Sie den ansible-Befehl so ändern, dass er mit erhöhten Sudo-Rechten ausgeführt wird.

$ ansible server2 -m apt -a "update_cache=yes upgrade=yes" -K -b -u ansible

Hier fragt -K nach dem Passwort für die Privilegieneskalation. -b führt die Ansible-Operation mit become aus, was es Ihnen ermöglicht, als ein anderer Benutzer zu agieren. Beide Variablen zusammen ermöglichen es Ansible, mit erhöhten Sudo-Rechten zu arbeiten. Sie müssen dies für alle Befehle verwenden, die Sudo-Rechte erfordern.

Manchmal erfordern einige dieser Aktualisierungsbefehle einen Neustart, also führen Sie den folgenden Befehl aus, um alle Ihre Server neu zu starten.

$ ansible all -a "reboot" -u root

Das waren nur einige der grundlegenden Befehle, die Sie mit Ansible ausführen können.

Fazit

Das war unser Tutorial zur Installation und Konfiguration von Ansible auf einem Ubuntu 20.04-basierten Server. Wenn Sie Fragen haben, posten Sie diese in den Kommentaren unten.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.