13 KiB
Ansible Ad-hoc -- Kurzreferenz
Diese Kurzreferenz fasst die besprochenen Ansible-Ad-hoc-Befehle
zusammen: mehrere Rechner direkt ansprechen, speziellen SSH-User
verwenden, Dateien sichern und kopieren, Rechte setzen, Benutzer mit
Home-Verzeichnis anlegen und per su statt sudo zu root wechseln.
Rechner direkt ansprechen
Ohne Inventory-Datei können Hosts direkt mit -i angegeben werden.
Wichtig ist das abschließende Komma.
ansible all \
-i "server01,server02,server03," \
-m ping
Alternativ mit IP-Adressen:
ansible all \
-i "10.10.1.20,10.10.1.21,10.10.1.22," \
-m ping
Speziellen SSH-User verwenden
Mit -u bzw. --user wird festgelegt, mit welchem Benutzer Ansible die
SSH-Verbindung aufbaut.
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-m ping
Wenn die SSH-Anmeldung ein Passwort benötigt, zusätzlich -k verwenden:
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-k \
-m ping
-k fragt das SSH-Passwort des Login-Users ab.
Datei kopieren, Rechte setzen und Backup erstellen
Das copy-Modul kann die Datei verteilen, Owner/Gruppe/Rechte setzen
und gleichzeitig die vorhandene Zieldatei sichern.
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-m copy \
-a "src=./config.conf dest=/etc/myapp/config.conf owner=root group=root mode=0644 backup=yes"
Falls für den Zielpfad erhöhte Rechte benötigt werden, muss zusätzlich Become verwendet werden.
Mit sudo
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-b \
-m copy \
-a "src=./config.conf dest=/etc/myapp/config.conf owner=root group=root mode=0644 backup=yes"
Falls sudo ein Passwort benötigt:
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-b -K \
-m copy \
-a "src=./config.conf dest=/etc/myapp/config.conf owner=root group=root mode=0644 backup=yes"
Vorher prüfen mit --check
Viele Änderungen können zunächst im Check-Modus getestet werden:
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-b \
-m copy \
-a "src=./config.conf dest=/etc/myapp/config.conf owner=root group=root mode=0644 backup=yes" \
--check
Neuen User inklusive Home-Verzeichnis anlegen
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-b \
-m user \
-a "name=newuser state=present create_home=yes shell=/bin/bash"
Dabei wird newuser angelegt und normalerweise /home/newuser
erstellt.
Zum vorherigen Test:
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-b \
-m user \
-a "name=newuser state=present create_home=yes shell=/bin/bash" \
--check
su statt sudo verwenden
Wenn auf den Zielsystemen nicht sudo, sondern su für den Wechsel zu
root verwendet werden muss:
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-b \
--become-method=su \
--become-user=root \
-K \
-m user \
-a "name=newuser state=present create_home=yes shell=/bin/bash"
Bedeutung:
-u deployuser-- SSH-Login alsdeployuser-b-- Become/Privilege Escalation aktivieren--become-method=su--sustattsudoverwenden--become-user=root-- zurootwechseln-K-- Become-/su-Passwort interaktiv abfragen
su zunächst testen
Bevor Änderungen durchgeführt werden, kann geprüft werden, ob der
Wechsel zu root funktioniert:
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-b \
--become-method=su \
--become-user=root \
-K \
-m command \
-a "whoami"
Bei erfolgreichem Wechsel sollte jeder Host root zurückgeben.
SSH-Passwort und su-Passwort
Wenn sowohl die SSH-Anmeldung als auch su ein Passwort benötigen,
müssen -k und -K verwendet werden:
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-k \
-b \
--become-method=su \
--become-user=root \
-K \
-m command \
-a "whoami"
Dabei gilt:
Option Bedeutung
-u deployuser SSH-Login-User
-k SSH-Passwort des Login-Users abfragen
-b Become aktivieren
--become-method=su su als Become-Methode
--become-user=root Zielbenutzer für Become
-K Become-/su-Passwort abfragen
Bei Verwendung von -k und -K fragt Ansible typischerweise nach:
SSH password:
BECOME password:
Ohne -k kann Ansible beispielsweise einen vorhandenen SSH-Key oder
SSH-Agent verwenden und fragt deshalb nicht nach dem SSH-Passwort.
Komplettbeispiel: Datei mit su verteilen
SSH-Anmeldung als deployuser per Passwort, anschließend su zu
root, vorhandene Datei sichern und neue Datei mit korrekten Rechten
verteilen:
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-k \
-b \
--become-method=su \
--become-user=root \
-K \
-m copy \
-a "src=./config.conf dest=/etc/myapp/config.conf owner=root group=root mode=0644 backup=yes"
######################################################################
Ansible Ad-hoc -- Kurzreferenz
Diese Kurzreferenz fasst die besprochenen Ansible-Ad-hoc-Befehle
zusammen: mehrere Rechner direkt ansprechen, speziellen SSH-User
verwenden, Dateien sichern und kopieren, Rechte setzen, Benutzer mit
Home-Verzeichnis anlegen und per su statt sudo zu root wechseln.
Rechner direkt ansprechen
Ohne Inventory-Datei können Hosts direkt mit -i angegeben werden.
Wichtig ist das abschließende Komma.
ansible all \
-i "server01,server02,server03," \
-m ping
Alternativ mit IP-Adressen:
ansible all \
-i "10.10.1.20,10.10.1.21,10.10.1.22," \
-m ping
Speziellen SSH-User verwenden
Mit -u bzw. --user wird festgelegt, mit welchem Benutzer Ansible die
SSH-Verbindung aufbaut.
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-m ping
Wenn die SSH-Anmeldung ein Passwort benötigt, zusätzlich -k verwenden:
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-k \
-m ping
-k fragt das SSH-Passwort des Login-Users ab.
Datei kopieren, Rechte setzen und Backup erstellen
Das copy-Modul kann die Datei verteilen, Owner/Gruppe/Rechte setzen
und gleichzeitig die vorhandene Zieldatei sichern.
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-m copy \
-a "src=./config.conf dest=/etc/myapp/config.conf owner=root group=root mode=0644 backup=yes"
Falls für den Zielpfad erhöhte Rechte benötigt werden, muss zusätzlich
Become verwendet werden.
Mit sudo
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-b \
-m copy \
-a "src=./config.conf dest=/etc/myapp/config.conf owner=root group=root mode=0644 backup=yes"
Falls sudo ein Passwort benötigt:
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-b -K \
-m copy \
-a "src=./config.conf dest=/etc/myapp/config.conf owner=root group=root mode=0644 backup=yes"
Vorher prüfen mit --check
Viele Änderungen können zunächst im Check-Modus getestet werden:
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-b \
-m copy \
-a "src=./config.conf dest=/etc/myapp/config.conf owner=root group=root mode=0644 backup=yes" \
--check
Neuen User inklusive Home-Verzeichnis anlegen
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-b \
-m user \
-a "name=newuser state=present create_home=yes shell=/bin/bash"
Dabei wird newuser angelegt und normalerweise /home/newuser
erstellt.
Zum vorherigen Test:
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-b \
-m user \
-a "name=newuser state=present create_home=yes shell=/bin/bash" \
--check
su statt sudo verwenden
Wenn auf den Zielsystemen nicht sudo, sondern su für den Wechsel zu
root verwendet werden muss:
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-b \
--become-method=su \
--become-user=root \
-K \
-m user \
-a "name=newuser state=present create_home=yes shell=/bin/bash"
Bedeutung:
-
-u deployuser-- SSH-Login alsdeployuser -
-b-- Become/Privilege Escalation aktivieren -
--become-method=su--sustattsudoverwenden -
--become-user=root-- zurootwechseln -
-K-- Become-/su-Passwort interaktiv abfragen
su zunächst testen
Bevor Änderungen durchgeführt werden, kann geprüft werden, ob der
Wechsel zu root funktioniert:
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-b \
--become-method=su \
--become-user=root \
-K \
-m command \
-a "whoami"
Bei erfolgreichem Wechsel sollte jeder Host root zurückgeben.
SSH-Passwort und su-Passwort
Wenn sowohl die SSH-Anmeldung als auch su ein Passwort benötigen,
müssen -k und -K verwendet werden:
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-k \
-b \
--become-method=su \
--become-user=root \
-K \
-m command \
-a "whoami"
Dabei gilt:
Option Bedeutung
---------------------- ---------------------------------------
-u deployuser SSH-Login-User
-k SSH-Passwort des Login-Users abfragen
-b Become aktivieren
--become-method=su su als Become-Methode
--become-user=root Zielbenutzer für Become
-K Become-/su-Passwort abfragen
Bei Verwendung von -k und -K fragt Ansible typischerweise nach:
SSH password:
BECOME password:
Ohne -k kann Ansible beispielsweise einen vorhandenen SSH-Key oder
SSH-Agent verwenden und fragt deshalb nicht nach dem SSH-Passwort.
Komplettbeispiel: Datei mit su verteilen
SSH-Anmeldung als deployuser per Passwort, anschließend su zu
root, vorhandene Datei sichern und neue Datei mit korrekten Rechten
verteilen:
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-k \
-b \
--become-method=su \
--become-user=root \
-K \
-m copy \
-a "src=./config.conf dest=/etc/myapp/config.conf owner=root group=root mode=0644 backup=yes"
Benutzer ohne nutzbares Passwort (!! in /etc/shadow)
Mit dem Ansible-user-Modul kann das Passwort eines Accounts mit password_lock=yes gesperrt werden:
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-k \
-b \
--become-method=su \
--become-user=root \
-K \
-m user \
-a "name=newuser state=present create_home=yes shell=/bin/bash password_lock=yes"
Auf üblichen Linux-Systemen ist das Passwortfeld damit gesperrt. Bei einem neu angelegten Benutzer kann /etc/shadow beispielsweise newuser:!!:... enthalten. Das genaue Sperrkennzeichen kann je nach Distribution und Ausgangszustand variieren.
Bedeutung von -m user und name=newuser
| Ausdruck | Bedeutung |
|---|---|
| -m user | Ansible-Modul user verwenden |
| name=newuser | Benutzer newuser verwalten bzw. anlegen |
| state=present | Sicherstellen, dass der Benutzer existiert |
| create_home=yes | Home-Verzeichnis anlegen |
| shell=/bin/bash | Bash als Login-Shell setzen |
| password_lock=yes | Passwort des Accounts sperren |
Wichtig: -m bezeichnet bei Ansible das Modul. Der Name des neuen Benutzers steht hinter name=.
Beispiel für appuser:
ansible all \
-i "server01,server02,server03," \
-u deployuser \
-k \
-b \
--become-method=su \
--become-user=root \
-K \
-m user \
-a "name=appuser state=present create_home=yes shell=/bin/bash password_lock=yes"
Nicht mit useradd verwechseln: Bei useradd -m appuser bedeutet -m, dass das Home-Verzeichnis erstellt wird. Bei ansible ... -m user wählt -m dagegen das Ansible-Modul aus.
Benutzer ohne Ansible anlegen
Direkt auf Linux:
useradd -m -s /bin/bash newuser
Passwortstatus bzw. Shadow-Eintrag prüfen:
passwd -S newuser
grep '^newuser:' /etc/shadow
Passwort explizit sperren:
passwd -l newuser
passwd -l sperrt einen vorhandenen Passwort-Hash durch ein vorangestelltes !. Der exakte Inhalt in /etc/shadow muss daher nicht zwingend exakt !! sein.