Ansible ist ein Werkzeug um Linux-Systeme aus der Ferne anzupassen. Gerade in Unternehmen haben Administratoren es oft mit dem Aufsetzen und dem Anpassen von Betriebssystemen zu tun – ja, auch Linux läuft in Unternehmen – auch in recht großen. Und ja, ich habe damit zu tun.

Ansible hat den Vorteil – man kann damit nicht nur ein System auf einem Mal konfigurieren, dies ist etwa bei SSH (Secure Shell) der Fall. Mittels Ansible kann ich beliebig viele Linux-Systeme zur gleichen Zeit anpassen.

Gleich einmal zu Beginn, auch mit Ansible arbeitet man am Terminal – und auch hier gilt es zu wissen, was man tut. Dieser Artikel wird nicht an einem Tag fertig sein, bis die ersten groben Themen besprochen sind, bleibt das Thema gesperrt – anschließend kann auch jeder beitragen.

Ansible ist übrigens die Distribution vollkommen egal – Sie können mit einem Debian, Ubuntu oder openSUSE warten und umgekehrt. Optimal genutzt wird Ansible, wenn die Clients statische IP-Adressen haben.

Ansible installieren

Unter auf Debian basierenden Linux-Distributionen installieren Sie diese Software wie üblich über die Paket-Verwaltung durch das Paketansible„. Möchten Sie die aktuellste Version der Software nutzen, installieren Sie diese am besten über das Python-Repository durch das Paketansible„.

Den Server vorbereiten

Zu Beginn gilt es einen Rechner auszuwählen, dieser dient als Server – so gesehen als Wartungsmaschine für die anderen Rechner, die es zu konfigurieren gilt. Auf diesem wird auch Ansible installiert. Wichtig natürlich – auf den Clients muss man einen administrativen Zugang haben.

Auf diesem erstellt man sich jetzt unter „/etc/ansible/“ – das Verzeichnis gilt es erst manuell anzulegen – am einfachsten als Admin am Terminal:

mkdir /etc/ansible

Dort erstellt man sich eine „hosts„-Datei, ebenfalls am Terminal, mit administrativen Rechten:

touch /etc/ansible/hosts

Diese Datei befüllt man anschließend mit den entsprechenden Hostnamen – wieder mit administrativen Rechten am Terminal:

nano /etc/ansible/hosts

Ein Beispiel:

host_1
host_2
host_3

Die Datei wird mit Strg+o gespeichert, mit Eingabe wird bestätigt und mit Strg+x wird der Editor geschlossen.

Anschließend legt man auf dem Server – etwa im Home-Verzeichnis eine Datenbank an – eine reine Textdatei mit der Endung „.yaml„. Diese befüllt man anschließend nach folgendem Schema:

all:
     hosts:
            client_1:
                    ansible_host: client_1
                    ansible_host: client_2
                    ansible_host: client_3

Ich nenne die Datei jetzt ganz einfach einmal „inventory.yaml„. Bevor man mit Ansible auf den entfernten Rechnern arbeiten kann, gilt es Informationen über diese zu sammeln. Dies geschieht über den Befehl:

ansible -i inventory.yaml client_1 -m setup

Dies wird mit jedem Client wiederholt – es kann jetzt einige Sekunden dauern, bis man Informationen erhält. Die Daten werden für jeden Client automatisch gespeichert.

Zur Sicherheit lässt sich später jeder Rechner anpingen:

ansible -i inventory.yaml all -m ping

Jetzt können wir gleich einmal versuchen auf einem der Clients oder allen ein Paket zu installieren, ich nehme jetzt einfach einmal das Paketzsh“ – so lernen wir gleich einmal die Syntax ein wenig kennen.

ansible -i inventory.yaml client_1 -m package -a "name=zsh state=present" -b --ask-become-pass

Dasselbe mit allen Clients:

ansible -i inventory.yaml clients -m package -a "name=zsh state=present" -b --ask-become-pass

Mit „-i“ geben wir die Datenbank an, mit „-m“ das Modul – in diesem Beispiel nennt sich das Modul „package“ – für Software-Pakete. Mit „-a“ geben wir Argumente für das Modul an – handelt es sich um mehrere Argumente, setzt man diese unter Anführungszeichen. In diesem Beispiel sind es die Argumente „name=“ (um den Namen des Paketes anzugeben) und „state=“ den Status.
Ansible will wissen, was sein soll, wenn die Arbeit abgeschlossen ist – in diesem Fall „present“ – das Paket soll zum Abschluss also installiert sein.
Mit der Option „-b“ erzeugt man eine „privilege escalation“ – diese ermöglicht es etwa ein Paket zu installieren. Durch „--ask-become-pass“ erfolgt die Abfrage des root-Passwortes.

SSH-Login-Begrüßung anpassen

Zum Anpassen der SSH-Login-Begrüßung ist die Datei/etc/motd“ verantwortlich – die Datei muss unter Umständen erst angelegt werden. Um komplette Zeilen auszutauschen, das Ansible-Modul „blockinfile„. Um mehrere Aufgaben auf einmal zu erledigen erstellt man sich ein Playbook – einfach eine Textdatei mit der Endung „.yaml„.

Playbook-Inhalt:

- hosts: all
tasks:
- name: Leere Datei "/etc/motd" erstellen
file:
path: "/etc/motd"
state: touch
become: yes

- name: Datei "/etc/motd" mit Begrüßung befüllen
blockinfile:
dest: /etc/motd
block: |
Neue Begrueßung von Robert Goedl auf rechnername!

Wichtig – bei YAML auf die Einrückungen (zwei Leerzeichen) achten.

Jetzt wird die Aufgabe ausgeführt:

ansible-playbook playbook.yaml -i inventory.yaml -b --ask-become-pass

Die Zeile ‚Neue Begrueßung von Robert Goedl auf rechnername!‘ löschen:

Das Playbook:

- hosts: all
tasks:
- name: Zeile 'Neue Begrueßung von Robert Goedl auf rechnername!' aus '/etc/motd' entfernen
lineinfile:
dest: /etc/motd
regexp: Neue Begrueßung von Robert Goedl auf rechnername!
state: absent

Die Zeile “Neue Begrueßung von Robert Goedl auf rechnername!‘ durch ‚Alte Begrüßung ersetzt!‘ ersetzen.

Das Playbook:

- hosts: all
tasks:
- name: Zeile 'Neue Begrueßung von Robert Goedl auf rechnername!' durch 'Alte Begrüßung ersetzt!' ersetzen.
lineinfile:
path: /etc/motd
search_string: 'Neue Begrueßung von Robert Goedl auf rechnername!'
line: Alte Begrüßung ersetzt!

Categories:

Schreibe einen Kommentar

Eine Reaktion

Neue Themen im Forum
Neujahrsvorsatz
Umlaute in PDF-FormularMit Okular gibt es unter Debian (alle Distributionen mit dieser Ok … Weiterlesen
Kann man einen Browser (flatpak) …Das Crashen ist gelöst. Es lag am VMWare Kerneltreiber in der Vers … Weiterlesen
Kategorien im Wiki
WIKI-Beiträge des Monates

Die Beiträge des Monates finden Sie im Kalender unter den blau markierten Tageszahlen.

September 2023
M D M D F S S
 123
45678910
11121314151617
18192021222324
252627282930  
Archive