Ansible ist ein kostenloses Open-Source-Tool und eines der beliebtesten Tools zur Konfigurationsverwaltung. Es ist ein plattformübergreifendes Tool, das Cloud Computing, Konfigurationsmanagement, Paketinstallation und Dienstkonfiguration vereinfacht. Es verwendet eine YAML-Datei, die die Schritte enthält, die der Benutzer auf einem bestimmten Computer ausführen möchte. Mit Ansible können Sie mehr als nur Hosts mit einem einzigen Befehl konfigurieren und verwalten. Ansible ist eine Alternative zu den anderen Konfigurationsverwaltungstools wie Chef und Puppet.
In diesem Artikel zeige ich Ihnen, wie Sie das Ansible-Konfigurationsverwaltungstool unter Debian 11 installieren und verwenden.
Voraussetzungen
- Drei Server mit Debian 11.
- Ein Root-Passwort wird auf jedem Server konfiguriert.
Für dieses Tutorial verwenden wir das folgende Setup:
- Ansible-Steuerung - 192.168.10.9
- Ansible-Hosts - 192.168.10.10, 192.168.10.11
Installieren Sie Ansible unter Debian 11
Standardmäßig ist das Ansible-Paket nicht im Debian-Standard-Repository enthalten. Es gibt zwei Möglichkeiten, Ansible unter Debian 11 zu installieren.
- Verwendung des APT-Befehls
- PIP-Befehl verwenden
Installieren Sie Ansible mit APT
Zunächst müssen Sie einige Abhängigkeiten in Ihrem System installieren. Sie können die erforderlichen Abhängigkeiten mit dem folgenden Befehl installieren:
apt-get install gnupg2 curl wget -y
Sobald alle Abhängigkeiten installiert sind, bearbeiten Sie die APT-source.list und fügen das Ansible-Repository hinzu:
nano /etc/apt/sources.list
Fügen Sie die folgende Zeile hinzu:
deb http://ppa.launchpad.net/ansible/ansible/ubuntu focal main
Speichern und schließen Sie die Datei, wenn Sie fertig sind, und fügen Sie dann den Ansible GPG-Schlüssel mit dem folgenden Befehl hinzu:
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367
Sie sollten 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
Aktualisieren Sie nun das Repository und installieren Sie Ansible mit dem folgenden Befehl:
apt-get update
apt-get install ansible -y
Überprüfen Sie nach der Installation von Ansible die Ansible-Version mit dem folgenden Befehl:
ansible --version
Sie sollten 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]
Installieren Sie Ansible mit PIP
Zuerst müssen Sie Python und PIP auf Ihrem System installieren. Sie können es mit dem folgenden Befehl installieren:
apt-get install python3 python3-pip -y
Verwenden Sie nach Abschluss der Installation den pip-Befehl, um Ansible wie unten gezeigt zu installieren:
pip install ansible
sshpass installieren
sshpass ist ein Befehlszeilentool, mit dem Sie Kennwörter mit SSH-Befehlen bereitstellen können. Hier verwenden wir sshpass auf dem Ansible-Controller-Knoten mit Ansible, um einen Remote-Host zu authentifizieren.
Sie können den sshpass mit dem folgenden Befehl installieren:
apt-get install sshpass -y
Stellen Sie als Nächstes eine Verbindung zum ersten Ansible-Remote-Host her, um Ihren known_hosts einen SSH-Fingerabdruck hinzuzufügen Datei:
ssh [email protected]
Sie werden wie unten gezeigt aufgefordert, ein SSH-Passwort anzugeben:
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:
Geben Sie Ihr Passwort ein und drücken Sie die Eingabetaste, um einen SSH-Fingerabdruck hinzuzufügen.
Verbinden Sie sich als Nächstes mit dem zweiten Ansible-Remote-Host, um einen SSH-Fingerabdruck zu Ihrer known_hosts-Datei hinzuzufügen:
ssh [email protected]
Sie werden wie unten gezeigt aufgefordert, ein SSH-Passwort anzugeben:
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:
Geben Sie Ihr Passwort ein und drücken Sie Enter .
Sie können jetzt den Befehl sshpass verwenden, um die SSH-Verbindung zu überprüfen:
sshpass -p yourpassword ssh [email protected]
Ansible-Hosts-Inventardatei erstellen
Als Nächstes müssen Sie eine Inventardatei erstellen, um die IP-Adresse, den Benutzernamen, das Passwort und den SSH-Port Ihres Remote-Hosts zu definieren:
nano ~/.hosts
Fügen Sie 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
Speichern und schließen Sie die Datei.
Hinweis :In der obigen Datei verwenden wir die IP, den Benutzernamen, das Passwort und den SSH-Port von Remote-Hosts.
Arbeiten mit Ansible
Ansible bietet viele Module, die Ihnen helfen, Remote-Hosts zu verwalten.
Die grundlegende Syntax zum Ausführen von Ansible wie unten gezeigt:
ansible -i [inventory_file] -m [module] [host]
Lassen Sie uns die Ping-Verbindung zu allen Hosts überprüfen:
ansible -i ~/.hosts -m ping all
Wenn alles in Ordnung ist, sollten Sie 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 Sie die Ping-Konnektivität des einzigen Servers1 überprüfen möchten, führen Sie den folgenden Befehl aus:
ansible -i ~/.hosts -m ping server1
Sie sollten die folgende Ausgabe erhalten:
server1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" }
Sie können das Shell-Modul verwenden, um alle Befehle auf den Remote-Hosts auszuführen.
Um beispielsweise „free -m auszuführen " Befehl auf server2, führen Sie den folgenden Befehl aus:
ansible -i ~/.hosts -m shell -a "free -m" server2
Sie sollten 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 eine "df -h " commad auf server2, führen Sie den folgenden Befehl aus:
ansible -i ~/.hosts -m shell -a "df -h" server2
Sie sollten 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 stellt ein geeignetes Modul bereit, um beliebige Pakete auf den Remote-Hosts zu installieren.
Zur Installation von Nginx Paket auf server1 führen Sie den folgenden Befehl aus:
ansible -i ~/.hosts -m ansible.builtin.apt -a "name=nginx state=present" server1
Sie sollten 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) ..." ] }
Führen Sie den folgenden Befehl aus, um den Status des Nginx-Dienstes auf server1 zu überprüfen:
ansible -i ~/.hosts -m shell -a "systemctl status nginx" server1
Sie sollten 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 zum Erstellen und Verwalten von Benutzern auf den Remote-Hosts.
So erstellen Sie einen neuen Benutzer mit dem Namen user1 Führen Sie auf server1 den folgenden Befehl aus:
ansible -i ~/.hosts -m ansible.builtin.user -a "name=user1 password=yourpassword" server1
Sie sollten 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 haben Sie gelernt, wie Sie Ansible mit APT und PIP installieren. Sie haben auch gelernt, wie Sie verschiedene Ansible-Module verwenden, um Remote-Hosts zu verwalten. Ich hoffe, Sie haben jetzt genug Verständnis für Ansible. Fühlen Sie sich frei, mich zu fragen, wenn Sie irgendwelche Fragen haben.