Management von Clients mit Ansible

Zur Verwaltung unserer zahlreichen Linux-Notebooks verwenden wir die Open-Source-Software Ansible. Diese ermöglicht uns eine extrem leichte Softwareverteilung, eine Ad-hoc-Kommando-Ausführung auf allen unseren Clients sowie ein einfaches Konfigurationsmanagement. Ansible verwaltet Netzwerkcomputer über SSH und erfordert keinerlei zusätzliche Software auf dem zu verwaltenden System. Ansible kann sogar Windows-Clients managen.

Ansible lässt sich bei Ubuntu sowie Debian ganz bequem über die Paketquellen installieren:

sudo apt install ansible

Damit sich Ansible auf den Client-Systemen anmelden kann, benötigt man einen ssh-Schlüssel, den man mit dem folgenden Befehl erstellt:

ssh-keygen -b 4096

Nach der Erstellung muss dieser Schlüssel auf die Clients kopiert werden, die verwaltet werden sollen. Dieses geschieht mit dem folgenden Befehl:

ssh-copy-id -i .ssh/id_rsa.pub benutzer@IP-Adresse

Dabei muss „benutzer“ durch den Benutzernamen ersetzt werden, unter dem Ansible laufen soll und zudem muss „IP-Adresse“ durch die korrekte IP-Adresse des Clients ersetzt werden. Nach der Verteilung des öffentlichen ssh-Schlüssels an die Clients müssen diese in die Datei /etc/ansible/hosts eingetragen werden. Es folgt ein Beispiel für unsere Roboter-AG-Laptops:

[RoboLaptops]
10.1.11.1
10.1.11.2

Ad-hoc-Kommando-Ausführung auf den Clients

Nachdem alle Clients, die verwaltet werden sollen, in die Datei /etc/ansible/hosts eingetragen und der öffentliche ssh-Schlüssel auf die Geräte übertragen wurde, kann man Ansible testen und einen Befehl auf allen Clients einer Gruppe (z.B. „RoboLaptops“) ausführen:

ansible RoboLaptops -u benutzer -a "shutdown -h now"

Dieses Kommando führt nun auf allen entsprechenden Geräten, die der Gruppe „RoboLaptops“ angehören, den Befehl „shutdown -h now“ aus und fährt die Geräte somit herunter. Zum Herunterfahren sind allerdings root-Privilegien erforderlich, weswegen der Befehl, so wie angegeben, nur funktioniert, wenn der Benutzer root ist.

Nutzung von „playbooks“

Damit man nicht immer einzelne Befehle eingeben muss, die dann auf allen Clients ausgeführt werden, gibt es sogenannte „playbooks“. Dabei handelt es sich um eine YAML-Datei, die die zu erreichende Konfiguration und Befehlsabfolge auf den Clients beschreibt. Die folgende Datei „e31.yml“ sorgt dafür, dass alle Clients im PC-Raum E31 die Paketquellen aktualisieren, alle verfügbaren Updates installieren und nicht mehr benötige Abhängigkeiten entfernen:

---
- hosts: E31
  remote_user: root
  tasks:
  - name: Run the equivalent of "apt-get update" as a separate step
    apt:
     update_cache: yes
  - name: Update all packages to the latest version
    apt:
     upgrade: dist
     dpkg_options: 'force-confold,force-confdef'
  - name: Remove dependencies that are no longer required
    apt:
     autoremove: yes

Meine Playbooks sind bei github verfügbar:

https://github.com/feschoppe/ansible-manage-ubuntu-clients