Archiv nach Kategorien: Linux

[ansible] Mit dictonaries arbeiten

Wichtig: getestet mit Ansible 2.4.2.0

Wenn man in Ansible Variablen deklarieren möchte, kann es der Übersichtlichkeit halber interessant sein, diese in Dictionaries anzulegen. Beispielsweise wenn man mit mehreren Umgebungen arbeitet  – Test/vProd/Prod – und Fachanwendungen auf Server „taggen“ möchte. Sprich eine List wo steht auf welchen Server die einzelnen Fachanwendungen installiert sind.

Deklaration

Ort der „vars“-Datei

wir deklarieren eine neue Variablen-Datei
<ansible-root>/vars/main.yml
oder mit Rollen
<ansible-root>/roles/<role-name>/vars/main.yml

Alternativ:

Inhalt der Datei

Auf diese Weise kann man ein „Host-Tagging“ bewerkstelligen.
Sprich man deklariert, auf welchen Servern eine bestimmte Anwendung installiert ist, und führt hier entsprechende Task’s aus.

Anwendung

Einen Parameter abfragen

Ergebnis:

Parameter und Host abfragen

Jetzt wird es ein wenig komplizierter, wir wollen einen Parameter und einen bestimmten Server abfragen.
Achtung! Eignet sich nur wenn man einen bestimmten Server sucht! Nicht für eine Gruppe von Servern.

Tipp: Variablen werden ohne Klammern deklariert

 

Alle hosts ausgeben

Ergebnis:

Loop over dictonary

Um mit allen Werten zu arbeiten bietet sich folgende Vorgehensweise an:

Ergebnis:

Task auf host „taggen“

Auf diese Weise kann man deklarieren, dass ein Task auf dem aktuellem Server nur ausgeführt wird, wenn er in einer entsprechenden Liste deklariert wurde.

Oder auf Klardeutsch:
Wenn host_a NICHT in den hosts von anwendung_a aufgelistet ist, würde der Task nicht auf diesem Host ausgeführt werden.

Zum nachlesen:

Hier wird das gut erklärt finde ich:
https://stackoverflow.com/questions/31566568/double-loop-ansible

Apache Wartungsseite schalten

Die (perfekte) Wartungsseite zu schalten ist eine Kunst für sich. zB wenn man verhindern möchte, dass die URL umgeschrieben wird oder das der Browser die Wartungsseite cacht.

Hier ein Beispiel, wo per per Datei die Wartungsseite aktiviert/deaktiviert werden kann:

# Wartung
RewriteCond /var/www/maintenance.enable -f
RewriteCond %{REQUEST_URI} !^/(wartung)/
RewriteRule ^.*$ /wartung/index.html [R=503,L]
ErrorDocument 503 /wartung/index.html
Header Set Cache-Control „max-age=0, no-store“

Proxmox: LXC – Container Speicherplatz verkleinern

Wer schon einmal versucht hat, den Speicherplatz eines LXC-Containers unter Proxmox zu verändern, wird überrascht feststellen, dass man zwar Speicherplatz hinzufügen, jedoch nicht entfernen kann.
Beispiel: 50GB root-Partition soll auf 30GB verringert werden ..

Das klappt tatsächlich nur über ein löschen und neu anlegen des Containers!

Hier ein Einzeiler dafür:


mit „–rootfs local:8“ gibt man die neue Größe in GB an.

Entfernte CheckMK-Agents überwachen (ssh/tls)

CheckMK-Agents sinf auf Pull ausgelegt, sprich der CheckMK-Server baut eine Verbindung zum Client auf und fragt die Daten ab. Dies geschieht unter Linux traditionell per xinetd oder ssh.

Das Verfahren funktioniert aber nicht, wenn der Agent nicht im Intranet hängt und keine SSH-Verbindung hergestellt werden kann/soll. (oftmals. aus Security-Gründen).

check_mk_remote

Hierfür wurde die Community-Erweiterung „check_mk_remote“ entwickelt, welche den Agent-Output in eine Datei umleitet und diese per scp auf den CheckMK Server überträgt. Die Auswertung erfolgt dann durch einen Host-spezifischen Datasource.

https://github.com/FlorianHeigl/nagios/tree/master/check_mk/check_mk_remote

Für das Verfahren von check_mk_remote ist eine passwortlose Authentifizierung, sowie ein öffentlich zugängiger SSH-Server erforderlich. Beides kann sicher betrieben werden, jedoch ist der Konfigurationsaufwand nicht zu unterschätzen und sicherheitstechnisch bedenklich, vor allem weil es 100 Kleinigkeiten zu bedenken gibt.

check_mk_push

Als Alternative habe ich eine Methode entwickelt, um den Agent-Output per https statt ssh zu übertragen.
Das Prinzip ist identisch, nur der Übertragungsweg ein ganz anderer.

Vorteile gegenüber check_mk_remote

  1. Keine aufwendige SSH-Konfiguration.
  2. keine spezielle Firewall-Freischaltung (es wird nur Port 443 benötigt, ssh ist oftmals gesperrt)
  3. Firmeninterner Web-Proxy kann benutzt werden (inkl. Authentifizierung)

Weiterlesen »

Google Drive als Backup-Lösung

Ich suche seit einiger Zeit einen günstigen Web-Storage um externe Backups meiner zahlosen Projekte  anzulegen. Hat mich selbst überrascht, aber Google ist hier mit ABSTAND! der billigste Anbieter, bei 3$/Monat für 100GB kann man echt nicht meckern ..

Ich bin bei weitem kein Freund von der Datenkrake Google, trotzdem ist google.de meine Standart-Suchmaschine und Android mein Pflicht-OS für’s Smartphone …

Trotzdem schaufel ich meine Backups nur PGP-verschlüsselt in die Google-Cloud!

Installation unter Debian 8

Zum synchronisieren mit google-drive benutze ich „drive“ von twodopeshaggy.
https://launchpad.net/~twodopeshaggy

Weiterlesen »

[Proxmox] V4 – Befehl in jedem LXC-Container ausführen

Ich habe einen Quick-and-Dirty Weg gefunden, einen Befehl in sämtlichen (laufenden!) LXC-Container auszuführen.

Auf dem Proxmox-Host-System:

In meinem Beispiel würde das check-mk Plugin apt auf in allen Containern in das (bestehende) Unterverzeichnis 14400 verschoben werden.

Tipp: Falls ihr einen Befehl mit Parametern ausführen wollt müsst ihr das mitteilen!

Beachtet das „–„

Neue ssh-Session immer im Screen öffnen

Jeder (Informatiker) kennt das Problem von Verbindungsabrüche, ob VNC, Telnet, SSH, …

Zumindest bei der Linux-Administration per SSH gibt es die Möglichkeit eine screen-Session zu erstellen um bei Verbindungsabruch dort weitermachen zu können wo man aufgehört hat.

Hier eine Lösung um JEDE neue (ssh-)Verbindung in einem Screen zu starten:

Achtung! Alle Einstellungen sind Server-seitig durchzuführen!

screenshot-window-2015-09-03-144806

[Bash] Codeschnippsel

Eine Sammlung von hilfreichen Bash-Codeschnippseln

 

 

 

[fail2ban] Datum in Mails korrigieren

Leider funktioniert das Datum in fail2ban-Mails nicht von Haus aus vernünftig, viele Mail-Clients (zB. Roundcubemail) kommen nicht damit klar.

Als Ergebniss fehlt die Datums-/Uhrzeitanzeige im Mailclient.
Ich habe einen billigen Fix gefunden:

In Linux Debian:
You can edit /etc/init.d/fail2ban and add at the beginning of the file, before definition ‚PATH‘ variable:
export LC_TIME=C

Klappt bei mir 1A

Quelle: https://github.com/fail2ban/fail2ban/issues/70

[Howto] Authentifizierung über SSH-Keys

Die Vorteile von SSH-Keys sind (in der Reihenfolge) Sicherheit und Bequemlichkeit.

Sicherheit

Es gibt keine 100% sicheren Kennwörter …
Kennwörter können erraten werden, ausspioniert oder stur durch Bruteforce ausgetestet werden.

Die Umstellung auf das Public-Key-Verfahren stellt sicher, das derjenige welcher sich anmeldet zumindest über ein speziellen privat-Key verfügt. Dieser liegt im Allgemeinen in Form einer Datei vor und sollte UNDBEDINGT mit einem Kennwort abgesichert werden. Also sichern wir nicht mehr unseren Server mit Kennwörter, sondern unser privat-Key.

Bequemlichleit

Admins und andere Büro-Insassen kennen das Problem, am Tag x-mal das Kennwort eintippen zu müssen. Zumindest bei Linux-Administration kann man sich hier eine Menge Frust ersparen, wenn man mit dem Public-Key-Verfahren arbeitet. Im Prinzip entsperrt man einmalig den privat-Key und authentifiziert sichanschließend nur noch über seinen Public-Key.

Grundlagen

Um dieses Verfahren zu verstehen benötigen wir einige Grundlagen.
Es gibt 2 Sorten von Keys, welche folgende Merkmale besitzen:

  • privat-Key
    • nur lokal speichern!
    • nicht weitergeben!
    • mit Kennwort schützen (Ausnahme automatisierung, zB. Backups)
  • public-Key
    • wird Serverseitig in die ~/.ssh/authorized_keys eingetragen
    • kann beliebig weitergegeben werden

Tipp: Schlüsseldateien generell sprechend benennen! zB. meinkey.pub.key, und meinkey.priv.key … Nicht das man public und privat key verwechselt

 

SSH-Keys generieren

Windows

Eine recht schöne Anleitung findet man auf der Webseite von winscp.
Lasst euch nicht vom Tool irritieren, auch winscp kann sich über SSH-Keys authentifizieren….

 

 

 

<\/body>