Wie man Ansible unter Debian 11 installiert und verwendet

Ansible ist ein freies, quelloffenes und eines der beliebtesten Konfigurationsmanagement-Tools. Es ist ein plattformübergreifendes Tool, das Cloud Computing, Konfigurationsmanagement, Paketinstallation und Servicekonfiguration vereinfacht. Es verwendet eine YAML-Datei, die die Schritte enthält, die der Nutzer auf einem bestimmten Rechner ausführen möchte. Mit Ansible kannst du mehr als Hosts mit einem einzigen Befehl konfigurieren und verwalten. Ansible ist eine Alternative zu anderen Konfigurationsmanagement-Tools wie Chef und Puppet.

In diesem Artikel zeige ich dir, wie du das Konfigurationsmanagement-Tool Ansible unter Debian 11 installierst und verwendest.

Voraussetzungen

  • Drei Server, auf denen Debian 11 läuft.
  • Auf jedem Server ist ein Root-Passwort eingerichtet.

Für dieses Tutorial werden wir die folgenden Einstellungen verwenden:

  • Ansible Controler – 192.168.10.9
  • Ansible Hosts – 192.168.10.10, 192.168.10.11

Ansible unter Debian 11 installieren

Standardmäßig ist das Ansible-Paket nicht im Standard-Repository von Debian enthalten. Es gibt zwei Möglichkeiten, Ansible unter Debian 11 zu installieren.

  1. Mit dem APT-Befehl
  2. Mit dem PIP-Befehl

Ansible mit APT installieren

Zuerst musst du einige Abhängigkeiten in deinem System installieren. Du kannst die benötigten Abhängigkeiten mit dem folgenden Befehl installieren:

apt-get install gnupg2 curl wget -y

Sobald alle Abhängigkeiten installiert sind, bearbeite die APT source.list und füge das Ansible-Repository hinzu:

nano /etc/apt/sources.list

Füge die folgende Zeile hinzu:

deb http://ppa.launchpad.net/ansible/ansible/ubuntu focal main

Wenn du fertig bist, speichere und schließe die Datei und füge den Ansible GPG-Schlüssel mit dem folgenden Befehl hinzu:

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367

Du solltest die folgende Ausgabe sehen:

Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
Executing: /tmp/apt-key-gpghome.lFEjztT9TY/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367
gpg: key 93C4A3FD7BB9C367: public key "Launchpad PPA for Ansible, Inc." imported
gpg: Total number processed: 1
gpg:               imported: 1

Aktualisiere nun das Repository und installiere Ansible mit dem folgenden Befehl:

apt-get update
apt-get install ansible -y

Sobald Ansible installiert ist, überprüfe die Ansible-Version mit dem folgenden Befehl:

ansible --version

Du solltest die folgende Ausgabe erhalten:

ansible 2.10.8
  config file = None
  configured module search path = ['/root/.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.9.2 (default, Feb 28 2021, 17:03:44) [GCC 10.2.1 20210110]

Ansible mit PIP installieren

Zuerst musst du Python und PIP auf deinem System installieren. Du kannst sie mit dem folgenden Befehl installieren:

apt-get install python3 python3-pip -y

Sobald die Installation abgeschlossen ist, installierst du Ansible mit dem pip-Befehl wie unten gezeigt:

pip install ansible

Installiere sshpass

sshpass ist ein Kommandozeilentool, mit dem du Passwörter für SSH-Befehle angeben kannst. Hier werden wir sshpass auf dem Ansible Controller Node mit Ansible verwenden, um einen entfernten Host zu authentifizieren.

Du kannst sshpass mit dem folgenden Befehl installieren:

apt-get install sshpass -y

Als Nächstes verbindest du dich mit dem ersten Ansible-Remote-Host, um einen SSH-Fingerabdruck zu deiner Datei known_hosts hinzuzufügen:

ssh root@192.168.10.10

Du wirst aufgefordert, ein SSH-Passwort einzugeben (siehe unten):

The authenticity of host '192.168.10.10 (192.168.10.10)' can't be established.
ECDSA key fingerprint is SHA256:q3zMoJ6qdjYvAdL7/w4Z0gm0ZEgGOB+rNIPKEMdYS6o.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.10.10' (ECDSA) to the list of known hosts.
Password: 

Gib dein Passwort ein und drücke die Eingabetaste, umeinen SSH-Fingerabdruck hinzuzufügen.

Als Nächstes verbindest du dich mit dem zweiten Ansible-Remote-Host, um einen SSH-Fingerabdruck zu deiner Datei known_hosts hinzuzufügen:

ssh root@192.168.10.11

Du wirst aufgefordert, ein SSH-Passwort einzugeben (siehe unten):

The authenticity of host '192.168.10.11 (192.168.10.11)' can't be established.
ECDSA key fingerprint is SHA256:q3zMoJ6qdjYvAdL7/w4Z0gm0ZEgGOB+rNIPKEMdYS6o.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.10.11' (ECDSA) to the list of known hosts.
Password: 

Gib dein Passwort ein und drücke Enter.

Du kannst nun den Befehl sshpass verwenden, um die SSH-Verbindung zu überprüfen:

sshpass -p yourpassword ssh root@192.168.10.10

Ansible Hosts-Inventardatei erstellen

Als Nächstes musst du eine Inventardatei erstellen, in der du die IP-Adresse, den Benutzernamen, das Passwort und den SSH-Port deines Remote-Hosts festlegst:

nano ~/.hosts

Füge die folgenden Zeilen hinzu:

[servers]
server1 ansible_host=192.168.10.10 ansible_user=root ansible_ssh_pass=password ansible_ssh_port=22
server2 ansible_host=192.168.10.11 ansible_user=root ansible_ssh_pass=password ansible_ssh_port=22

Speichere und schließe die Datei.

Hinweis: In der obigen Datei verwenden wir die IP-Adresse, den Benutzernamen, das Passwort und den SSH-Port der entfernten Hosts.

Arbeiten mit Ansible

Ansible bietet eine Vielzahl von Modulen, die dir bei der Verwaltung von Remote-Hosts helfen.

Die grundlegende Syntax für die Ausführung von Ansible sieht wie folgt aus:

ansible -i [inventory_file] -m [module] [host]

Überprüfen wir die Ping-Verbindung zu allen Hosts:

ansible -i ~/.hosts -m ping all

Wenn alles in Ordnung ist, solltest du die folgende Ausgabe erhalten:

server2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
server1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

Wenn du die Ping-Verbindung nur zu Server1 überprüfen willst, führe den folgenden Befehl aus:

ansible -i ~/.hosts -m ping server1

Du solltest die folgende Ausgabe erhalten:

server1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

Du kannst das Shell-Modul verwenden, um alle Befehle auf den entfernten Hosts auszuführen.

Um zum Beispiel den Befehl„free -m“ auf Server2 auszuführen, rufe den folgenden Befehl auf:

ansible -i ~/.hosts -m shell -a "free -m" server2

Du solltest die folgende Ausgabe sehen:

server2 | CHANGED | rc=0 >>
               total        used        free      shared  buff/cache   available
Mem:            1982         128         491           2        1363        1669
Swap:              0           0           0

Um den Befehl„df -h“ auf Server2 auszuführen, führe den folgenden Befehl aus:

ansible -i ~/.hosts -m shell -a "df -h" server2

Du solltest die folgende Ausgabe erhalten:

server2 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
udev            976M     0  976M   0% /dev
tmpfs           199M  404K  198M   1% /run
/dev/sda1        50G  2.4G   45G   5% /
tmpfs           992M  124K  992M   1% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           199M     0  199M   0% /run/user/0

Ansible bietet ein apt-Modul, mit dem du jedes Paket auf den entfernten Hosts installieren kannst.

Um das Nginx-Paket auf Server1 zu installieren, führe den folgenden Befehl aus:

ansible -i ~/.hosts -m ansible.builtin.apt -a "name=nginx state=present" server1

Du solltest die folgende Ausgabe erhalten:

server1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "cache_update_time": 1631424599,
    "cache_updated": false,
    "changed": true,
    "stderr": "",
    "stderr_lines": [],
        "Upgrading binary: nginx.",
        "Setting up nginx (1.18.0-6.1) ...",
        "Processing triggers for man-db (2.9.4-2) ...",
        "Processing triggers for libc-bin (2.31-13) ..."
    ]
}

Um den Status des Nginx-Dienstes auf Server1 zu überprüfen, führe den folgenden Befehl aus:

ansible -i ~/.hosts -m shell -a "systemctl status nginx" server1

Du solltest die folgende Ausgabe erhalten:

server1 | CHANGED | rc=0 >>
? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2021-09-12 05:55:36 UTC; 49s ago
       Docs: man:nginx(8)
    Process: 10761 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 10764 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 10871 (nginx)
      Tasks: 2 (limit: 2341)
     Memory: 5.8M
        CPU: 54ms
     CGroup: /system.slice/nginx.service
             ??10871 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??10874 nginx: worker process

Sep 12 05:55:36 ansible systemd[1]: Starting A high performance web server and a reverse proxy server...
Sep 12 05:55:36 ansible systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Sep 12 05:55:36 ansible systemd[1]: Started A high performance web server and a reverse proxy server.

Ansible bietet ein Benutzermodul, mit dem du Benutzer auf den Remote-Hosts erstellen und verwalten kannst.

Um einen neuen Benutzer namens user1 auf Server1 zu erstellen, führe den folgenden Befehl aus:

ansible -i ~/.hosts -m ansible.builtin.user -a "name=user1 password=yourpassword" server1

Du solltest die folgende Ausgabe sehen:

server1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": true,
    "comment": "",
    "create_home": true,
    "group": 1000,
    "home": "/home/user1",
    "name": "user1",
    "password": "NOT_LOGGING_PASSWORD",
    "shell": "/bin/sh",
    "state": "present",
    "system": false,
    "uid": 1000
}

Schlussfolgerung

In diesem Artikel hast du gelernt, wie du Ansible mit APT und PIP installierst. Außerdem hast du gelernt, wie du verschiedene Ansible-Module zur Verwaltung von Remote-Hosts einsetzen kannst. Ich hoffe, du hast jetzt genug über Ansible gelernt. Wenn du noch Fragen hast, kannst du dich gerne an mich wenden.

Das könnte dich auch interessieren …