Icinga check by ssh Plugin
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
- ↑ Giving yourself a quieter SSH login (debian-administration.org)
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.
|