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.
- Mit dem APT-Befehl
- 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.