Skip to content

Ansible Playbooks auf Servern mit SSH Key Authentifizierung verwenden

Manch einer automatisiert seine IT Umgebung via Ansible. Das Orchestrierungstool arbeitet über SSH und benötigt keine Agenten auf den Zielsystemen.

Ansible

 

Da gut konfigurierte Systeme neben einem Passwort durch einen SSH Key geschützt sind, muss beim Ausrollen eines Playbooks über die Kommandozeile theoretisch für jedes System ein Key geladen und ein Passwort eingegeben werden.

Dies lässt sich mit einem kleinen Trick umgehen, bzw. optimieren. Ich setze hier voraus, dass Geräte bereits für SSH Key Auth eingerichtet worden sind.

Ansible Playbooks mit SSH Keys nutzen

Soll ein Playbook ausgerollt werden, muss im Vorfeld der nötige Key eingelesen werden.

eval $(ssh-agent)

Enter passphrase for /home/itrig/.ssh/id_rsa: ******************

                Identity added: /home/itrig/.ssh/id_rsa

Nun kann das gewünschte Playbook ausgerollt werden.

ansible-playbook -l hostliste playbook.yml --ask-become-pass

Ein sudo Passwort wird weiterhin abgefragt, die Eingabe des  Passworts für eine Passphrase fällt nun bei jedem System weg. 

Vorraussetzung ist ein gleicher SSH Key auf allen Geräten, was einem Single Point of Failure nahe kommt, in diesem Kontext aber gewollt ist.  

Nun bleibt noch die Frage, was ist eval?

eval: eval [arg ...]

    Execute arguments as a shell command.

    Combine ARGs into a single string, use the result as input to the shell,

    and execute the resulting commands.

    Exit Status:

    Returns exit status of command or success if command is null.

eval [arg ...]

    The  args  are read and concatenated together into a single com-

    mand.  This command is then read and executed by the shell,  and

    its  exit status is returned as the value of eval.  If there are

    no args, or only null arguments, eval returns 0.

 

Fertige Playbooks oder Beispiele lassen sich in der Ansible Galaxy finden.

Beispielsweise für eine Paketinstallation auf Linuxsystemen:

Ansible Playbook zur Installation der Open VMware Tools

- name: install open-vm-tools
  hosts: vmwareclients
  gather_facts: True
  become: true
  become_user: root
  tasks:
- name: debian install open-vm-tools
  apt: name=open-vm-tools state=present
  when: ansible_os_family == "Debian" and ansible_virtualization_type == "VMware"

- name: centos install open-vm-tools
  yum: name=open-vm-tools state=present
  when: ansible_os_family == "RedHat" or ansible_distribution == 'CentOS' and ansible_virtualization_type == "VMware"

 

pgAdmin 4.x für Ubuntu, Debian, Mint und Co via Repository verfügbar

Kurze Meldung für PostgreSQL Freunde unter euch. Das bereits vorgestellte pgAdmin 4.x zur grafischen PostgreSQL Datenbank Server Verwaltung kann nun auch aus dem Postgres Repository installiert werden.

Bisher war unter Ubuntu oder Debian nur eine Installation via Python Wheel oder Docker möglich.

pgadmin4

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

sudo apt-get update

sudo apt-get install pgadmin4

 

Anleitung: PostgreSQL 9.x Installation auf Postgres 10 aktualisieren

PostgreSQL 10 ist nun seit ein paar Monaten auf dem Markt. Somit kann an ein Update der bestehenden Infrastruktur gedacht werden.

Diese kurze Anleitung soll zeigen, wie ein Update einer 9.x Installation auf die aktuelle Version 10 unter Ubuntu Server gelingt.

PostgreSQL Server 9.x auf Version 10 aktualisieren

Zunächst wird das aktuelle Repository hinterlegt.

sudo echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' > /etc/apt/sources.list.d/pgdg.list

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc |   sudo apt-key add -

sudo apt-get update

Nun kann die aktuelleste Version installiert werden

sudo apt-get dist-upgrade

oder

sudo apt install postgresql-10

Zur Überprüfung ob auch beide Versionen vorhanden sind können die aktiven DB Cluster aufgelistet werden

pg_lsclusters

ls_clusterNun kann das neue 10er Cluster angehalten und das bestehende aktualisiert werden.

sudo pg_dropcluster 10 main --stop

sudo pg_upgradecluster 9.5 main

Danach sollte wieder ein kurzer Check gemacht werden, bevor das alte System entfernt wird. Ich prüfe hier nur den Prozess.

Am besten die Datenbanken oder Anwendungen direkt auf Funktion prüfen, bevor die alte Version entfernt wird.

ps aux

sudo pg_dropcluster 9.5 main

postgres

Den Linux Bootvorgang mit systemd analysieren

Systemd läuft sys-v-init nach und nach den Rang hab. Das heißt bei der Untersuchung des Bootvorgangs können andere Wege gegangen werden und es muss nicht auf altbekannte Tools wie Bootcharts zurückgegriffen werden.

Systemd bringt ein eigenes Analysetool auf pythonbasis mit, welches ähnliche Möglichkeiten bietet.

Der Aufruf kann zunächst ohne Parameter getestet werden. Dieser liefert einen groben Überblick.

systemd-analyze

Startup finished in 7.239s (kernel) + 30.762s (userspace) = 38.001s

Das gleiche Ergebnis wirft auch der Parameter "time" aus.

Die Ausgabe gibt anders als auf den ersten Blick vermutet nicht den gesammten Bootvorgang wieder, sondern nur die Zeit zum Starten der Dienste und Co.

systemd-analyze-chain

Der Parameter "critical-chain" liefert hier schon einen detaillierten Blick auf mögliche Nachzügler.

systemd-analyze critical-chain

Eine Liste aller Units kann wie folgt ausgegeben werden.

systemd-analyze blame

systemd-analyze-blame

Um nun eine ähnliche grafische Ausgabe wie bei Bootcharts zu erhalten bietet systemd-analyze eine SVG Ausgabe. Diese kann mit einem herkömmlichen Browser geöffnet werden.

systemd-analyze plot > /home/itrig/systemd.svg

systemd-analyze-svg

Eine weitere grafische Ausgabe kann mit "dot" erzielt werden. Dabei werden die Abhängigkeiten aller Aufrufe dargestellt.

systemd-analyze dot | dot -Tsvg > /home/itrig/systemdplot.svg

Soll die Grafik auf einen Dienst beschränken werden, muss dieser einfach mit angegeben werden.

systemd-analyze dot 'docker*' |dot -Tsvg > /home/itrig/docker.svg

systemd-analyze-dot

Alle weiteren Befehle lassen sich mit "man" oder "help" einsehen.
 

systemd-analyze [OPTIONS...] {COMMAND} ...

Profile systemd, show unit dependencies, check unit files.

  -h --help               Show this help
     --version            Show package version
     --no-pager           Do not pipe output into a pager
     --system             Operate on system systemd instance
     --user               Operate on user systemd instance
  -H --host=[USER@]HOST   Operate on remote host
  -M --machine=CONTAINER  Operate on local container
     --order              Show only order in the graph
     --require            Show only requirement in the graph
     --from-pattern=GLOB  Show only origins in the graph
     --to-pattern=GLOB    Show only destinations in the graph
     --fuzz=SECONDS       Also print also services which finished SECONDS
                          earlier than the latest in the branch
     --man[=BOOL]         Do [not] check for existence of man pages

Commands:
  time                    Print time spent in the kernel
  blame                   Print list of running units ordered by time to init
  critical-chain          Print a tree of the time critical chain of units
  plot                    Output SVG graphic showing service initialization
  dot                     Output dependency graph in dot(1) format
  set-log-level LEVEL     Set logging threshold for manager
  set-log-target TARGET   Set logging target for manager
  dump                    Output state serialization of service manager
  verify FILE...          Check unit files for correctness

 

3 Methoden um alte Kernel unter Ubuntu, Linux Mint oder Elementary OS zu entfernen

Fehler oder Lücken im Kernel von Linux Systemen werden immer mal wieder entdeckt oder einfach neue Kernel mit neuen Funktionen veröffentlicht. 
Bei regemäßigen Updates kann eine ganze Sammlung an alten Kernel Versionen auf einem System entstehen.
Dies macht eine Bereinigung der betroffenen Systeme von Zeit zu Zeit notwendig.

Im Normalfall reicht ein apt-get autoremove autoclean aus, um ein System relativ sauber zu halten. 
Allerdings füllen alte Linux Kernel die Festplatte und werden im Normalfall nicht mehr benötigt.
Um diese zu entfernen gibt es verschiedene Möglichkeiten. Drei Varianten möchte ich heute vorstellen.

kernels-anzeigen

Erste Variante - Händisch

Die erste Variante hatte ich bereits im Blog erwähnt und wird mit Hilfe des Paketmanagers dpkg/apt durchgeführt und bedeutet etwas Handarbeit.

Zunächst werden die vorhandenen Kernels aufgelistet 

dpkg --list |grep linux

um sie danach händisch zu entfernen.

sudo dpkg --purge linux-image-4.4.0-xx-headers-generic linux-image-4.4.0-xx-generic linux-image-extra-4.4.0-xx-generic

Mit ein paar Tricks lässt sich dies auch vereinfachen.

sudo dpkg --purge linux-{image,headers}-4.x.x-{61,62,..}

Zweite Variante - Halbautomatisch

Ubuntu 16.04 hat das Tool byobu an Bord, welches das Kommando purge-old-kernels mitbringt. 

Sollte dies nicht der Fall sein, lässt es sich mit sudo apt install byobu nachinstallieren.

Danach kann eine Bereinigung des Systems relativ einfach durchgeführt werden.

sudo purge-old-kernels

Der Befehl löscht alle Kernel bis auf die zwei letzen. Sollte dies nicht gewünscht sein, kann das Verhalten mit dem --keep Parameter geändert werden.

sudo purge-old-kernels --keep 3

Dieser Befehl behält die letzten drei Kernel und löscht den Rest.

purge-old-kernels

Dritte Variante - Automatisch

Für automatische Updates und andere Aufgaben bringt Ubuntu das Tool unattended-upgrades mit.

Hiermit lässt sich eine Bereinigung komplett automatisieren.

sudo dpkg-reconfigure -plow unattended-upgrade

Nun muss unter /etc/apt/apt.conf.d/50unattended-upgrades folgendes freigeschaltet werden:

Unattended-Upgrade::Remove-Unused-Dependencies "true";

autoremove-kernelFazit

Sollte Zeit eine Rolle spielen, bietet sich die automatische Methode wohl am ehesten an, allerdings ist man hier nicht mehr ganz Herr über das Systemverhalten,was Risiken mit sich bringt. 

Debiananwender werden die erste Variante kennen und nicht missen wollen.

Die zweite Variante purge-old-kernels stellt sicherlich die einfachste und schnellste Methode dar, um ein System von Altlasten zu befreien.