Icinga check by ssh Plugin

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen

check_by_ssh führt remote Icinga/Nagios-Checks über eine SSH-Verbindung durch. Es stellt eine Alternative zum Icinga NRPE Plugin dar und empfiehlt sich vor allem für Server, die bereits per SSH zugänglich sind. Eine Gegenüberstellung von check_by_ssh und NRPE findet sich im archivierten Artikel des Nagios Wikis unter NRPE vs SSH (web.archive.org). Empfindlich ist check_by_ssh aufgrund der Verwendung von Public-Key-Authentifizierung gegenüber Änderungen der SSH-Key-Infrastruktur (z.B. wenn Hosts neu-installiert werden und die Host-Keys sich dadurch ändern).

Am Icinga Server

Für den User Nagios wird eine SSH-Schlüsselpaar ohne Passphrase angelegt. Achtung: Es gilt dieses Schlüsselpaar sorgsam zu schützen, da durch die fehlende Passphrase die Schlüssel-Datei genügt, um sich mit dem Zielrechner zu verbinden (vgl. OpenSSH Public Key Authentifizierung unter Ubuntu).

Das Setup setzt voraus, dass Icinga unter dem User nagios läuft:

$ ps -u nagios
  PID TTY          TIME CMD
 4008 ?        00:00:03 icinga

SSH-Key erstellen

Bei der Abfrage von ssh-keygen nach dem Passwort muss dieses leer gelassen werden, damit sich der Icinga-/Nagios-Daemon zum überwachten Client verbinden kann:

# cd /var/lib/nagios/
# mkdir .ssh
# ssh-keygen
[...]

SSH-Public-Key auf zu überwachenden Client übertragen

Der Public-Key wird in die Datei ".ssh/authorized_keys" des verwendeten Users am überwachten Client übertragen. Der Icinga-/Nagios-User kann dadurch den Check ohne Eingabe einer Passphrase durchführen:

# ssh-copy-id -i .ssh/id_rsa.pub client@10.0.0.2
# chown -R nagios.nagios /var/lib/nagios/.ssh
# ssh -i /var/lib/nagios/.ssh/id_rsa client@10.0.0.2

Das Ausführen des Befehls "ssh -i ..." darf zu keiner Abfrage eines Passworts führen, da Public-Key-Authentifizierung verwendet werden sollte.

Ausführung eines Plugins testen

Zum Testen wird am Client eine Plugin-Datei eines Checks benötigt. Diese wird mittels check_by_ssh aufgerufen (als root, da die Key-Datei dem User "nagios" gehört).

check_by_ssh ist Teil des Packages nagios-plugins-basic:

$ sudo apt-get install nagios-plugins-basic
$ dpkg -L nagios-plugins-basic |grep by_ssh
/usr/lib/nagios/plugins/check_by_ssh

Nach der Installation wird check_by_ssh aufgerufen:

# /usr/lib/nagios/plugins/check_by_ssh -H 10.0.0.2 -l client\
>  -i /var/lib/nagios/.ssh/id_rsa -C "/usr/lib/nagios/plugins/check_users -w 0 -c 2"
USERS CRITICAL - 3 users currently logged in |users=3;0;2;0

Außerdem muss überprüft werden, ob das Szenario auch unter Verwendung des nagios-Users funktioniert:

$ sudo -u nagios /usr/lib/nagios/plugins/check_by_ssh -H 10.0.0.2 -l client\
>  -i /var/lib/nagios/.ssh/id_rsa -C "/usr/lib/nagios/plugins/check_users -w 0 -c 2"
USERS CRITICAL - 3 users currently logged in |users=3;0;2;0

Vor allem die einmalige Host-Verifikation für den User "nagios" wird dadurch sicher gestellt.

Kommando-Definition erstellen

Der oben gezeigte Test dient als Basis für die Kommando-Definition:

# vi /etc/icinga/commands.cfg
[...]

define command{
  command_name check_users_ssh
  command_line /usr/lib/nagios/plugins/check_by_ssh -H $HOSTADDRESS$ -l $ARG1$ -i /var/lib/nagios/.ssh/id_rsa -C "$ARG2$ -w $ARG3$ -c $ARG4$"
  }

Host-Service erstellen

Bei der Service-Definition werden dem Kommando die entsprechenden Parameter mitgeteilt:

define host{
  use           generic-host
  host_name     gpu-host-1
  alias         gpu-1
  address       10.0.0.2
  }

define service{
  use                  generic-service
  host_name            gpu-host-1
  service_description  USERS
  check_command        check_users_ssh!client!/usr/lib/nagios/plugins/check_users!0!2
  }

Probleme mit issue.net

Unter Umständen könne Probleme mit der Ausgabe von issue.net auftreten, wenn eine Verbindung per ssh aufgebaut wird:

$ /usr/local/nagios/libexec/check_by_ssh -H  192.0.2.10 -l nagios -i /var/lib/nagios/.ssh/id_rsa -C "/usr/lib/nagios/plugins/check_load -w 5.0,4.0,3.0 -c 10.0,6.0,4.0"
Entfernte Ausführung des Befehls fehlgeschlagen: Ubuntu 14.04.1 LTS
$ ssh -i /var/lib/nagios/.ssh/id_rsa nagios@192.0.2.10 "/usr/lib/nagios/plugins/check_load -w 5.0,4.0,3.0 -c 10.0,6.0,4.0"
Ubuntu 14.04.1 LTS
OK - load average: 0.00, 0.01, 0.05|load1=0.000;5.000;10.000;0; load5=0.010;4.000;6.000;0; load15=0.050;3.000;4.000;0;

Die Zeile Ubuntu 14.04.1 LTS darf, damit check_by_ssh funktioniert, nicht ausgegeben werden. Als Work-Around kann:

  • in der Datei /etc/issue.net die Zeile auskommentiert werden
  • für den User am Client im Home-Verzeichnis die Datei .hushlogin erstellt werden[1]

Bei ähnlichen Problemen bei Logins auf Centos (issue.net, MOTD oder Login-Banner stört), kann man alternativ am Icinga Server (in diesem Beispiel als User nagios) in der Datei ~/.ssh/config folgenden Eintrag ergänzen:

LogLevel QUIET

Einzelnachweise

  1. Giving yourself a quieter SSH login (debian-administration.org)


Foto Georg Schönberger.jpg

Autor: Georg Schönberger

Georg Schönberger, Abteilung DevOps bei der XORTEX eBusiness GmbH, absolvierte an der FH OÖ am Campus Hagenberg sein Studium zum Bachelor Computer- und Mediensicherheit, Studium Master Sichere Informationssysteme. Seit 2015 ist Georg bei XORTEX beschäftigt und arbeitet sehr lösungsorientiert und hat keine Angst vor schwierigen Aufgaben. Zu seinen Hobbys zählt neben Linux auch Tennis, Klettern und Reisen.


Das könnte Sie auch interessieren

Grafana Installation und Konfiguration unter Ubuntu Server 18.04 LTS
Icinga Mobile
SNMP Grundlagen