# Ansible-Kurs 2024-09 ## Zuordnung * `tn01-purple.heinlein-akademie.de` Sebastian B. * `tn02-purple.heinlein-akademie.de` Linus C. * `tn03-purple.heinlein-akademie.de` Benjamin H. * `tn04-purple.heinlein-akademie.de` Johanna H. * `tn05-purple.heinlein-akademie.de` Jonas K. * `tn06-purple.heinlein-akademie.de` Sven S. * `tn07-purple.heinlein-akademie.de` Stefan Sch. ## Allgemein ### root-Rechte Der Benutzer `kurs` ist in den `sudo`-Einstellungen (ohne Passwort-Eingabe) hinterlegt. Ihr könnt also `sudo -Es`, `sudo -i`, `sudo su -`, ... oder natürlich auch `sudo apt install ...` usw. verwenden! ## Debian ### Paketmanager Kurzeinführung * Index-Files aktualisieren: `(sudo) apt(-get) update` * Pakete suchen (**alle** Begriffe!): `apt-cache search ansible lint` * Pakete installieren: `(sudo) apt(-get) install ansible-lint` ### Standard-Editor anpassen ``` root@tn00-purple:~# update-alternatives --config editor There are 8 choices for the alternative editor (providing /usr/bin/editor). Selection Path Priority Status ------------------------------------------------------------ * 0 /usr/bin/joe 70 auto mode 1 /bin/nano 40 manual mode 2 /usr/bin/jmacs 50 manual mode 3 /usr/bin/joe 70 manual mode 4 /usr/bin/jpico 50 manual mode 5 /usr/bin/jstar 50 manual mode 6 /usr/bin/rjoe 25 manual mode 7 /usr/bin/vim.basic 30 manual mode 8 /usr/bin/vim.tiny 15 manual mode Press to keep the current choice[*], or type selection number: 8 [...] root@tn00-purple:~# ls -l /etc/alternatives/editor /etc/alternatives/vim lrwxrwxrwx 1 root root 18 Nov 22 09:09 /etc/alternatives/editor -> /usr/bin/vim.basic lrwxrwxrwx 1 root root 18 Aug 17 21:58 /etc/alternatives/vim -> /usr/bin/vim.basic ``` ## SSH-Agent ### SSH-Agent in einer Sitzung starten ``` kurs@tn00-purple:~# eval $(ssh-agent) Agent pid 2720104 ``` ### SSH-Key am Agent registrieren ``` kurs@tn00-purple:~# ssh-add Enter passphrase for /home/svelt/.ssh/id_ed25519: ``` ### Ein SSH-Agent in mehreren SSH-Verbindungen 1. SSH-Agent starten ``` kurs@tn00-purple:~# eval $(ssh-agent | tee ~/.ssh-agent.sh) SSH_AUTH_SOCK=/tmp/ssh-r4RVMmRg9KAR/agent.2720217; export SSH_AUTH_SOCK; SSH_AGENT_PID=2720218; export SSH_AGENT_PID; echo Agent pid 2720218; Agent pid 2720218; ``` 2. In **jeder weiteren** SSH-Verbindung auf die VM (per copy&paste): - Kann für weitere Verbindungen auch später gemacht werden ``` kurs@tn00-purple:~# source ~/.ssh-agent.sh Agent pid 2720218; ``` 3. Verbindung zum SSH-Agent mit `ssh-add -l` testen - "Could not connect to agent" -> Agent läuft nicht und/oder Variablen nicht gesetzt - "This agent has no identities" -> Verbindung zum Agent geht, Agent hat aber keine Keys - Key -> Verbindung zum Agent geht, Key(s) registriert und verfügbar (4. überflüssig) 4. SSH-Key registrieren - nur einmal nötig - Variablen via Script aus 2. Schritt müssen gesetzt sein ``` kurs@tn00-purple:~# ssh-add ``` Damit könnt Ihr dann den einen Agent in allen SSH-Verbindungen zur VM nutzen. ### Alternative: Keychain Voraussetzung: SSH-Key existiert, liegt unter (beliebigem) Namen unter `~/.ssh/` 1. Keychain installieren ``` kurs@tn00-purple:~$ apt install keychain ``` 2. Von Hand testen ``` kurs@tn00-purple:~$ keychain ~/.ssh/id_ed25519 * keychain 2.8.5 ~ http://www.funtoo.org * Starting ssh-agent... * Adding 1 ssh key(s): /home/kurs/.ssh/id_ed25519 Enter passphrase for /home/kurs/.ssh/id_ed25519: * ssh-add: Identities added: /home/kurs/.ssh/id_ed25519 kurs@tn00-purple:~$ ssh-add -l Could not open a connection to your authentication agent. kurs@tn00-purple:~$ cat ~/.keychain/${HOSTNAME}-sh SSH_AUTH_SOCK=/tmp/ssh-pZf3VyTB4hs3/agent.1612572; export SSH_AUTH_SOCK; SSH_AGENT_PID=1612575; export SSH_AGENT_PID; kurs@tn00-purple:~$ . ~/.keychain/${HOSTNAME}-sh kurs@tn00-purple:~$ ssh-add -l 256 SHA256:9+6FWilZKB46vt/n8HX3eVggjmdt40vXclBPkggaHvM kurs@tn00-purple (ED25519) ``` 3. In Shell automatisch starten ``` cat <>.bashrc keychain ~/.ssh/id_ed25519 . ~/.keychain/${HOSTNAME}-sh EOF ``` ## LXC LXC == LinuX Container Mit den selben Kernel-Mechanismen ("cgroups", "IP namespaces") wie z.B. Docker wird ein - in z.B. ein Verzeichnis installiertes - Linux-System gestartet und dabei vom Hauptsystem getrennt. Auf jeder VM sind ~25 LXC(ontainer) mit verschiedenen Distributionen installiert. Die Distribution sollte sich aus den Namen der Container ableiten lassen. ### Anzeigen der Container ``` root@tn00-purple:~# lxc-ls -f NAME STATE AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED… tn00-alma8 RUNNING 1 ansible 192.168.1.138 - false tn00-alpine3b RUNNING 1 ansible 192.168.1.194 - false tn00-alpine3c RUNNING 1 ansible 192.168.1.139 - false tn00-alpine3d RUNNING 1 ansible 192.168.1.152 - false tn00-alpine3e RUNNING 1 ansible 192.168.1.134 - false tn00-arch RUNNING 1 ansible 192.168.1.192 - false [...] ``` ### Container in /etc/hosts hinzufügen Bitte nur einmal ;) ausführen! ``` sudo lxc-ls -f -F ipv4,name | grep -v NAME | sudo tee -a /etc/hosts ``` ### Wechseln in den Container ``` root@tn00-purple:~# lxc-attach tn00-alpine3b ~# cat /etc/os-release NAME="Alpine Linux" ID=alpine VERSION_ID=3.11.0 PRETTY_NAME="Alpine Linux v3.11" HOME_URL="https://alpinelinux.org/" BUG_REPORT_URL="https://bugs.alpinelinux.org/" ~# ^D ``` Beenden mit Strg-D (Shell beenden) ### Zugriff auf Dateien im Container Die Container sind auf File-Basis unter `/var/lib/lxc/CONTAINERNAME/` installiert, das File-System liegt dort jeweils im Verzeichnis `rootfs`. Ein `cat /var/lib/lxc/tn00-alpine3b/rootfs/etc/os-release` im Host würde also die gleiche Dateien anzeigen wie oben. ## git ### Git-Einführung Unter https://training.velt.biz/workshop/Git-Quickstart/ findet Ihr eine kleine Git-Einführung ### Repositories mit git clonen Hier am Beispiel "`cleanup-hosts`" von https://git.velt.biz/Ansible/cleanup-hosts: ``` git clone https://git.velt.biz/Ansible/cleanup-hosts.git ``` Das Ergebnis ist ein Verzeichnis "`cleanup-hosts`", welches genau so in das `roles`-Verzeichnis geschoben (und umbenannt) werden kann. ## Praktische/Schöne Statusbar für vim ``` apt install vim-airline ```