SSH Konfiguration: Privat, Arbeit, teilen mit Kollegen?!

Ich habe meine .ssh/config Datei mit den Einträgen die ich benötige. In dieser Datei habe ich Einträge für dienstliche Systeme aber auch private. Aus diesem Grund kann die Datei nicht einfach mit anderen Kollegen geteilt werden. Wie das dennoch erreicht werden kann, kurz und pragmatisch hier beschrieben:

Als allererstes muss ich die Konfigurationsdatei aufsplitten können in mehrere Teile. Also ein ~/.ssh/config.d/ Verzeichnis anstatt einer einzelnen Datei. SSH unterstützt das von Haus aus nicht, man kann sich aber an dieser Stelle eines Tricks bedienen: ein Alias für das Kommando „ssh“, das bei jedem Aufruf die .ssh/config einfach neu schreibt. Dafür die folgende Zeile in die .bash_aliases  eintragen:

alias ssh="cat ~/.ssh/config.d/* > ~/.ssh/config; ssh"

Als zweites gilt es nun die Dateien aufzuspalten. Ich persönlich pflege drei Dateien:

  1. general
  2. privat
  3. work

In der ersten Datei habe ich Optionen, die für alle Hosts gelten:

Host *
Compression             yes
CompressionLevel        9
ServerAliveInterval     30
#VisualHostKey          yes

In den anderen Dateien sind die Definitionen für die privaten und die Arbeitsrechner.

Der dritte Punkt ist der einfachste: Die Dateien einfach in ein Repository legen, symbolische Links aus dem Repository in das config.d Verzeichnis erzeugen und mit den Kollegen teilen.

Natürlich Backups zwischendrin etc. nicht vergessen ;-)

praktisches grep

Zeilen vor und nach dem Treffer ausgeben mit -B (–before-context) und -A (–after-context). Muss nicht weiter erklärt werden:

 grep -A1 -B2 "foo" /path/to/file

Zeichen vor und nach dem Treffer ausgeben geht mit -o (–only-matching) und -E (–extended-regexp). Der Parameter -E sorgt dafür, dass wonach gesucht wird als regulärer Ausdruck ausgewertet wird. Die Option -o zeigt nur das an was zutrifft, also nicht wie sonst üblich die komplette Zeile:

 grep -o -E ".{0,1}foo.{0,2}" /path/to/file

Dateinamen nicht angeben bei Treffern geht mit -h (–no-filename). Das ist gerade in der Kombination mit -E und -o praktisch wenn man das Ergebnis weiter verarbeiten möchte und nicht die Dateinamen mit einem dritten Programm (cut, awk…) wegparsen möchte:

 grep -Eho '' /path/to/files*

Steht alles auch so in der manpage 8-)

Update 2015-12-04:

grep -h -oP "ServerName \K.*" /etc/apache2/sites-enabled/*

(via)

Munin: Hostnamen ändern und Daten beibehalten

muninProblem
Munin auf einem Host installiert aber in der /etc/munin/munin.conf den [localhost.localdomain] Eintrag nicht angepasst. Wenn ich den nun einfach ändere gehen alle bisher aufgezeichneten Daten verloren.

Lösung

  1. Munin node stoppen
    service munin-node stop
  2. Cronjobs auskommentieren
    vim /etc/cron.d/munin
    vim /etc/cron.d/munin-node
  3. Backup von Dateien erstellen
    tar -czf /root/varlibmunin.tar.gz /var/lib/munin
  4. Ordner umbenennen
    cd /var/lib/munin 
    mv localdomain example.org
  5. Dateien umbenennen
    cd example.org
    for i in localhost.localdomain-*; do mv $i ${i/localhost.localdomain/www.example.org}; done
  6. alte HTML Dateien löschen
    rm -rf /var/cache/munin/www/localdomain
  7. Hostnamen in der /etc/munin/munin.conf anpassen
  8. Node starten und Cronjobs wieder einkommentieren