668 lines
13 KiB
Markdown
668 lines
13 KiB
Markdown
# 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.
|
||
|
||
```bash
|
||
ansible all \
|
||
-i "server01,server02,server03," \
|
||
-m ping
|
||
```
|
||
|
||
Alternativ mit IP-Adressen:
|
||
|
||
```bash
|
||
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.
|
||
|
||
```bash
|
||
ansible all \
|
||
-i "server01,server02,server03," \
|
||
-u deployuser \
|
||
-m ping
|
||
```
|
||
|
||
Wenn die SSH-Anmeldung ein Passwort benötigt, zusätzlich `-k` verwenden:
|
||
|
||
```bash
|
||
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.
|
||
|
||
```bash
|
||
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
|
||
|
||
```bash
|
||
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:
|
||
|
||
```bash
|
||
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:
|
||
|
||
```bash
|
||
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
|
||
|
||
```bash
|
||
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:
|
||
|
||
```bash
|
||
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:
|
||
|
||
```bash
|
||
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 als `deployuser`
|
||
- `-b` -- Become/Privilege Escalation aktivieren
|
||
- `--become-method=su` -- `su` statt `sudo` verwenden
|
||
- `--become-user=root` -- zu `root` wechseln
|
||
- `-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:
|
||
|
||
```bash
|
||
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:
|
||
|
||
```bash
|
||
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:
|
||
|
||
```text
|
||
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:
|
||
|
||
```bash
|
||
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.
|
||
|
||
```bash
|
||
ansible all \
|
||
|
||
-i "server01,server02,server03," \
|
||
|
||
-m ping
|
||
```
|
||
|
||
Alternativ mit IP-Adressen:
|
||
|
||
```bash
|
||
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.
|
||
|
||
```bash
|
||
ansible all \
|
||
|
||
-i "server01,server02,server03," \
|
||
|
||
-u deployuser \
|
||
|
||
-m ping
|
||
```
|
||
|
||
Wenn die SSH-Anmeldung ein Passwort benötigt, zusätzlich `-k` verwenden:
|
||
|
||
```bash
|
||
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.
|
||
|
||
```bash
|
||
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
|
||
|
||
```bash
|
||
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:
|
||
|
||
```bash
|
||
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:
|
||
|
||
```bash
|
||
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
|
||
|
||
```bash
|
||
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:
|
||
|
||
```bash
|
||
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:
|
||
|
||
```bash
|
||
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 als `deployuser`
|
||
|
||
- `-b` -- Become/Privilege Escalation aktivieren
|
||
|
||
- `--become-method=su` -- `su` statt `sudo` verwenden
|
||
|
||
- `--become-user=root` -- zu `root` wechseln
|
||
|
||
- `-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:
|
||
|
||
```bash
|
||
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:
|
||
|
||
```bash
|
||
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:
|
||
|
||
```text
|
||
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:
|
||
|
||
```bash
|
||
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:
|
||
|
||
```bash
|
||
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`:
|
||
|
||
```bash
|
||
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:
|
||
|
||
```bash
|
||
useradd -m -s /bin/bash newuser
|
||
```
|
||
|
||
Passwortstatus bzw. Shadow-Eintrag prüfen:
|
||
|
||
```bash
|
||
passwd -S newuser
|
||
|
||
grep '^newuser:' /etc/shadow
|
||
```
|
||
|
||
Passwort explizit sperren:
|
||
|
||
```bash
|
||
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.
|