<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Hobgoblin's Master (shinken)</title><link>http://hobgoblins-master.info/</link><description></description><atom:link href="http://hobgoblins-master.info/categories/shinken.xml" type="application/rss+xml" rel="self"></atom:link><language>fr</language><lastBuildDate>Tue, 25 Aug 2015 11:16:03 GMT</lastBuildDate><generator>http://getnikola.com/</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>check_by_ssh_wrapper</title><link>http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html</link><dc:creator>Landry MINOZA</dc:creator><description>&lt;div&gt;&lt;p&gt;En essayant de mutualiser au maximum la configuration des services Nagios (ou Shinken dans mon cas) et la configuration NRPE des machines supervisées, il arrive parfois qu’une vérification renvoie trop de données pour NRPE ou qu’on doive accéder à une machine en DMZ voir externe dont on ne peut pas laisser le port NRPE ouvert.&lt;/p&gt;
&lt;p&gt;Sur un des parcs que je supervise, alors que mes configurations NRPE permettent de vérifier (entre autre) l’espace disque disponible sur tous les systèmes de fichiers locaux, je me suis retrouvé avec un NAS en DMZ contenant de nombreux systèmes de fichiers (un volume LVM par partage). Le volume de données renvoyé, avec les données de performances dépassait la taille acceptée par NRPE (1 ko de mémoire). Plutôt que de déporter la ligne de commande NRPE vers la configuration Shinken et me retrouver à devoir gérer les problèmes d’échapements, de droits et ainsi complexifier ma conf Shinken, j’ai écrit ce petit script qui prend via check_by_ssh les mêmes paramètres que check_nrpe et lit la configuration NRPe sur le client afin de valider la commande et l’exécuter.&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;div class="section" id="le-code"&gt;
&lt;h2&gt;Le code&lt;/h2&gt;
&lt;p&gt;Il s’agit d’un simple script en bash, aujourd’hui hébergé sur &lt;a class="reference external" href="https://github.com/hobgoblinsmaster/check_by_ssh_wrapper"&gt;GitHub&lt;/a&gt;. Au moment où j’écris ce billet, le code est le suivant :&lt;/p&gt;
&lt;table class="codetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-1"&gt; 1&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-2"&gt; 2&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-3"&gt; 3&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-4"&gt; 4&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-5"&gt; 5&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-6"&gt; 6&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-7"&gt; 7&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-8"&gt; 8&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-9"&gt; 9&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-10"&gt;10&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-11"&gt;11&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-12"&gt;12&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-13"&gt;13&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-14"&gt;14&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-15"&gt;15&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-16"&gt;16&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-17"&gt;17&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-18"&gt;18&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-19"&gt;19&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-20"&gt;20&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-21"&gt;21&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-22"&gt;22&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-23"&gt;23&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-24"&gt;24&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-25"&gt;25&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-26"&gt;26&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-27"&gt;27&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-28"&gt;28&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-29"&gt;29&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-30"&gt;30&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-31"&gt;31&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-32"&gt;32&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-33"&gt;33&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-34"&gt;34&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-35"&gt;35&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-36"&gt;36&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-37"&gt;37&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-38"&gt;38&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-39"&gt;39&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-40"&gt;40&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-41"&gt;41&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-42"&gt;42&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-43"&gt;43&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-44"&gt;44&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-45"&gt;45&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-46"&gt;46&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-47"&gt;47&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-48"&gt;48&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-49"&gt;49&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-50"&gt;50&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-51"&gt;51&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-52"&gt;52&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-53"&gt;53&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-54"&gt;54&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-55"&gt;55&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-56"&gt;56&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-57"&gt;57&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-58"&gt;58&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-59"&gt;59&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-60"&gt;60&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-61"&gt;61&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-62"&gt;62&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-63"&gt;63&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-64"&gt;64&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-65"&gt;65&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-66"&gt;66&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-67"&gt;67&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-68"&gt;68&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-69"&gt;69&lt;/a&gt;
&lt;a href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#rest_code_a080e7faee5b47bf8f06189bf89864a4-70"&gt;70&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="code bash"&gt;&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-1"&gt;&lt;/a&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-2"&gt;&lt;/a&gt;&lt;span class="c"&gt;#&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-3"&gt;&lt;/a&gt;&lt;span class="c"&gt;# check_by_ssh_wrapper&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-4"&gt;&lt;/a&gt;&lt;span class="c"&gt;#&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-5"&gt;&lt;/a&gt;&lt;span class="c"&gt;# This script provides access to commands declared in nrpe to check_by_ssh&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-6"&gt;&lt;/a&gt;&lt;span class="c"&gt;# Please set the nrpeconf variable to the right value&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-7"&gt;&lt;/a&gt;&lt;span class="c"&gt;# You must generate a ssh key on the nagios server, copy it in .ssh/authorized_keys&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-8"&gt;&lt;/a&gt;&lt;span class="c"&gt;# in nagios (or nrpe) user home directory on distant server, then add this at&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-9"&gt;&lt;/a&gt;&lt;span class="c"&gt;# the begining of the line juste before the key:&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-10"&gt;&lt;/a&gt;&lt;span class="c"&gt;# no-pty,no-port-forwarding,command="/usr/local/bin/check_by_ssh_wrapper $SSH_ORIGINAL_COMMAND"&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-11"&gt;&lt;/a&gt;&lt;span class="c"&gt;#&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-12"&gt;&lt;/a&gt;&lt;span class="c"&gt;# You can the use $USER1$/check_by_ssh -H &amp;lt;distant host&amp;gt; -l nagios -C 'check_cmd [args]'&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-13"&gt;&lt;/a&gt;&lt;span class="c"&gt;#&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-14"&gt;&lt;/a&gt;&lt;span class="c"&gt;# Freely inspired by nagios_ssh_framework. Can be used when nrpe port can't be accessed&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-15"&gt;&lt;/a&gt;&lt;span class="c"&gt;# or check_command returns to many text for nrpe and you want to keep facilities of nrpe&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-16"&gt;&lt;/a&gt;&lt;span class="c"&gt;# config files.&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-17"&gt;&lt;/a&gt;&lt;span class="c"&gt;#&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-18"&gt;&lt;/a&gt;&lt;span class="c"&gt;# Changes an Modifications:&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-19"&gt;&lt;/a&gt;&lt;span class="c"&gt;# 2011-10-12 - Landry MINOZA - V 1.0&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-20"&gt;&lt;/a&gt;&lt;span class="c"&gt;# Created because check_disks returns to many lines for nrpe with one of my servers&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-21"&gt;&lt;/a&gt;&lt;span class="c"&gt;#&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-22"&gt;&lt;/a&gt;&lt;span class="c"&gt;# Copyright: Telbase Formation Conseil, MUSEE D'ORSAY 2011&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-23"&gt;&lt;/a&gt;&lt;span class="c"&gt;#&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-24"&gt;&lt;/a&gt;&lt;span class="c"&gt;# This program is free software: you can redistribute it and/or modify&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-25"&gt;&lt;/a&gt;&lt;span class="c"&gt;# it under the terms of the GNU General Public License as published by&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-26"&gt;&lt;/a&gt;&lt;span class="c"&gt;# the Free Software Foundation, either version 3 of the License, or&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-27"&gt;&lt;/a&gt;&lt;span class="c"&gt;# (at your option) any later version.&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-28"&gt;&lt;/a&gt;&lt;span class="c"&gt;#&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-29"&gt;&lt;/a&gt;&lt;span class="c"&gt;# This program is distributed in the hope that it will be useful,&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-30"&gt;&lt;/a&gt;&lt;span class="c"&gt;# but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-31"&gt;&lt;/a&gt;&lt;span class="c"&gt;# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-32"&gt;&lt;/a&gt;&lt;span class="c"&gt;# GNU General Public License for more details.&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-33"&gt;&lt;/a&gt;&lt;span class="c"&gt;#&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-34"&gt;&lt;/a&gt;&lt;span class="c"&gt;# You should have received a copy of the GNU General Public License&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-35"&gt;&lt;/a&gt;&lt;span class="c"&gt;# along with this program.  If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-36"&gt;&lt;/a&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-37"&gt;&lt;/a&gt;&lt;span class="c"&gt;# Set main nrpe.cfg file&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-38"&gt;&lt;/a&gt;&lt;span class="nv"&gt;nrpeconf&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/etc/nagios/nrpe.cfg
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-39"&gt;&lt;/a&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-40"&gt;&lt;/a&gt;&lt;span class="c"&gt;# Get cmdname&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-41"&gt;&lt;/a&gt;&lt;span class="nv"&gt;cmdname&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-42"&gt;&lt;/a&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; -z &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$cmdname&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-43"&gt;&lt;/a&gt;        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"WARNING, no command name provided"&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-44"&gt;&lt;/a&gt;        &lt;span class="nb"&gt;exit &lt;/span&gt;1
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-45"&gt;&lt;/a&gt;&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-46"&gt;&lt;/a&gt;&lt;span class="nb"&gt;shift&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-47"&gt;&lt;/a&gt;&lt;span class="c"&gt;# Get optionnal args&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-48"&gt;&lt;/a&gt;&lt;span class="nv"&gt;cmdargs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$@&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-49"&gt;&lt;/a&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-50"&gt;&lt;/a&gt;&lt;span class="c"&gt;# Declare an array of commands&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-51"&gt;&lt;/a&gt;&lt;span class="nb"&gt;declare&lt;/span&gt; -A &lt;span class="nb"&gt;command&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-52"&gt;&lt;/a&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-53"&gt;&lt;/a&gt;&lt;span class="c"&gt;# find all nrpe conf files&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-54"&gt;&lt;/a&gt;&lt;span class="nv"&gt;include&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;sed -ne &lt;span class="s1"&gt;'/^include=/ s/^.*=// p'&lt;/span&gt; &lt;span class="nv"&gt;$nrpeconf&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-55"&gt;&lt;/a&gt;&lt;span class="nv"&gt;include_dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;sed -ne &lt;span class="s1"&gt;'/^include_dir=/ s/^.*=// p'&lt;/span&gt; &lt;span class="nv"&gt;$nrpeconf&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-56"&gt;&lt;/a&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-57"&gt;&lt;/a&gt;&lt;span class="c"&gt;# Parse all nrpe conf files for command[*]= arguments&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-58"&gt;&lt;/a&gt;&lt;span class="k"&gt;for&lt;/span&gt; cfgfile in &lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; -e &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$nrpeconf&lt;/span&gt;&lt;span class="s2"&gt;\n&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;include&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;\n&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;include_dir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;*.cfg"&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-59"&gt;&lt;/a&gt;        &lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="k"&gt;$(&lt;/span&gt;sed -ne &lt;span class="s1"&gt;'/^command\[/ s/=\(.*\)$/="\1"/ p'&lt;/span&gt; &lt;span class="nv"&gt;$cfgfile&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-60"&gt;&lt;/a&gt;&lt;span class="k"&gt;done&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-61"&gt;&lt;/a&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-62"&gt;&lt;/a&gt;&lt;span class="c"&gt;# Check if command[$cmdname] exists&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-63"&gt;&lt;/a&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; -z &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;command&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;$cmdname&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-64"&gt;&lt;/a&gt;        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"WARNING, command &lt;/span&gt;&lt;span class="nv"&gt;$cmdname&lt;/span&gt;&lt;span class="s2"&gt; does not exist"&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-65"&gt;&lt;/a&gt;        &lt;span class="nb"&gt;exit &lt;/span&gt;1
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-66"&gt;&lt;/a&gt;&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-67"&gt;&lt;/a&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-68"&gt;&lt;/a&gt;&lt;span class="c"&gt;# Launch check&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-69"&gt;&lt;/a&gt;&lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;command&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;$cmdname&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="nv"&gt;$cmdargs&lt;/span&gt;
&lt;a name="rest_code_a080e7faee5b47bf8f06189bf89864a4-70"&gt;&lt;/a&gt;&lt;span class="nb"&gt;exit&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;Le code peut être difisé en 8 parties :&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Ligne 38, à éditer, il s’agit de l’emplacement de la configuration NRPE (ici pour une Debian stable).&lt;/li&gt;
&lt;li&gt;Ligne 40 à 48, récupération et vérification des paramètres.&lt;/li&gt;
&lt;li&gt;Ligne 51, déclaration explicite (obligatoire) d’un tableau associatif de commandes, il servira à stocker pour chaque commande nommée de la configuration NRPe la ligne de commande correspondante.&lt;/li&gt;
&lt;li&gt;Ligne 54 et 55, récupération des directives include et include_dir du fichier nrpe.conf afin de référencer ces fichiers inclus. &lt;strong&gt;Attention&lt;/strong&gt;, cette recherche des fichiers inclus n’est pas récursive, seule les inclusions déclarées dans le fichier de configuration principal seront prises en compte.&lt;/li&gt;
&lt;li&gt;Ligne 58 et 60, on boucle sur la liste des fichiers trouvés.&lt;/li&gt;
&lt;li&gt;Ligne 59, cette ligne est un peu le cœur du script, c’est une astuce s’appuyant sur la forme des paramètres NRPE, en effet, vu que pour déclarer une commande NRPE on écrit : &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;command[nom_commande]=ligne_commande&lt;/span&gt; params&lt;/tt&gt; il suffit d’extraire ces lignes et d’entourer la ligne de commande (après le "=") de guillements puis de les exécuter via eval pour nourrir notre tableau associatif &lt;em&gt;command&lt;/em&gt; déclaré plus haut.&lt;/li&gt;
&lt;li&gt;Ligne 63, on teste s’il esxite un commande avec le nom passé en paramètre à notre script.&lt;/li&gt;
&lt;li&gt;Enfin ligne 69, on exécute la commande spécifiée avec ses paramètres. Le exit explicite à la fin permet de s’assurer que l’état de sortie soit le même que celui de la commande donc que celui-ci soit bien transmis à Nagios.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="installation"&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;Ce script s’installe sur la machine supervisée, pas sur le serveur de supervision, par exemple dans &lt;tt class="docutils literal"&gt;/usr/local/bin&lt;/tt&gt;. L’utilisateur exécutant le démon NRPE (sur Debian, il s’agit de l’utilisateur nagios) doit avoir les droits d’exécution sur le script. Par défaut, cet utilisateur n’a pas de mot de passe, et on ne souhaite pas lui en affecter un. De toute façon, ce n’est jamais une bonne idée d’avoir des mots de passes dans la configuration Nagios. Il faut commencer par créer une clé SSH sur le serveur de supervision en utilisant la commande &lt;tt class="docutils literal"&gt;ssh_keygen&lt;/tt&gt; sous l’identité de l’utilisateur exécutant le serveur de supervision. Par défaut, cette commande va générer une clé rsa, la placer dans &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;$HOME/.ssh/id_rsa&lt;/span&gt;&lt;/tt&gt; et placer la clé publique dans &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;$HOME/.ssh/id_rsa.pub&lt;/span&gt;&lt;/tt&gt;. C’est cette dernière qui nous intéresse.&lt;/p&gt;
&lt;p&gt;Il faut créer dans le &lt;tt class="docutils literal"&gt;$HOME&lt;/tt&gt; de l’utilisateur exécutant le démon NRPE (&lt;tt class="docutils literal"&gt;/var/lib/nagios&lt;/tt&gt; sur Debian) un répertoire &lt;tt class="docutils literal"&gt;.ssh&lt;/tt&gt; avec les droits unix &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;rwx------&lt;/span&gt;&lt;/tt&gt;&lt;/p&gt;
&lt;pre class="code bash"&gt;&lt;a name="rest_code_6f362ea413a74d649393fa36e10866c3-1"&gt;&lt;/a&gt;mkdir /var/lib/nagios/.ssh
&lt;a name="rest_code_6f362ea413a74d649393fa36e10866c3-2"&gt;&lt;/a&gt;chown nagios:nagios /var/lib/nagios/.ssh
&lt;a name="rest_code_6f362ea413a74d649393fa36e10866c3-3"&gt;&lt;/a&gt;chmod &lt;span class="nv"&gt;u&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;rwx,go&lt;span class="o"&gt;=&lt;/span&gt; /var/lib/nagios/.ssh
&lt;/pre&gt;&lt;p&gt;Dans ce répertoire on place un fichier nommé &lt;tt class="docutils literal"&gt;authorized_keys&lt;/tt&gt; ne contenant que la ligne suivante :&lt;/p&gt;
&lt;pre class="code text"&gt;&lt;a name="rest_code_8ce3cd4c3f15444ba08f6915ede78ced-1"&gt;&lt;/a&gt;no-pty,no-port-forwarding,command="/usr/local/bin/check_by_ssh_wrapper $SSH_ORIGINAL_COMMAND" ssh-rsa AAAA… user@server
&lt;/pre&gt;&lt;p&gt;Remplacer &lt;tt class="docutils literal"&gt;AAAA… user@server&lt;/tt&gt; par le contenu du fichier &lt;tt class="docutils literal"&gt;id_rsa.pub&lt;/tt&gt; du serveur de supervision.
Cette ligne &lt;a class="footnote-reference" href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#id2" id="id1"&gt;[1]&lt;/a&gt; permet de n’autoriser à l’utilisateur se connectant avec cette clé publique que la lancement de la commande &lt;tt class="docutils literal"&gt;check_by_ssh_wrapper&lt;/tt&gt; (il est plus que conseillé de mettre un chemin absolu) en interdisant les transferts de ports et l’allocation d’un pseudo terminal. La commande originellement passé à ssh sera fournie en argument à notre script via la variable &lt;tt class="docutils literal"&gt;$SSH_ORIGINAL_COMMAND&lt;/tt&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="utilisation"&gt;
&lt;h2&gt;Utilisation&lt;/h2&gt;
&lt;p&gt;Dans la configuration Nagios, il ne reste plus qu’a créer une commande :&lt;/p&gt;
&lt;pre class="code text"&gt;&lt;a name="rest_code_2ce736bda910499bafe40bc83ff310e5-1"&gt;&lt;/a&gt;define command{
&lt;a name="rest_code_2ce736bda910499bafe40bc83ff310e5-2"&gt;&lt;/a&gt;        command_name check_by_ssh
&lt;a name="rest_code_2ce736bda910499bafe40bc83ff310e5-3"&gt;&lt;/a&gt;        command_line $USER1$/check_by_ssh -H $HOSTADDRESS$ -t 60 -l nagios -C '$ARG1$ $ARG2$'
&lt;a name="rest_code_2ce736bda910499bafe40bc83ff310e5-4"&gt;&lt;/a&gt;}
&lt;/pre&gt;&lt;p&gt;Celle-ci pourra ensuite être utilisée de la même façon que le check_nrpe dans les services :&lt;/p&gt;
&lt;pre class="code text"&gt;&lt;a name="rest_code_c07793b3e61249f0b08047c509e27319-1"&gt;&lt;/a&gt;define service{
&lt;a name="rest_code_c07793b3e61249f0b08047c509e27319-2"&gt;&lt;/a&gt;        use                     base-service
&lt;a name="rest_code_c07793b3e61249f0b08047c509e27319-3"&gt;&lt;/a&gt;        service_description     check_disks
&lt;a name="rest_code_c07793b3e61249f0b08047c509e27319-4"&gt;&lt;/a&gt;        display_name            Check Disks
&lt;a name="rest_code_c07793b3e61249f0b08047c509e27319-5"&gt;&lt;/a&gt;        check_command           check_by_ssh!check_disks
&lt;a name="rest_code_c07793b3e61249f0b08047c509e27319-6"&gt;&lt;/a&gt;}
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="section" id="conclusion"&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Ce script n’est sans doute pas parfait, je me suis par exemple rendu compte en rédigeant ce billet qu’il ne gère pas les inclusions récursives, mais il fonctionne parfaitement depuis 2 ans, et m’a permis de simplifier grandement l’utilisation du plugin &lt;tt class="docutils literal"&gt;check_by_ssh&lt;/tt&gt; tout en le sécurisant puisque seules les commandes déclarées dans la configuration nrpe sont exécutables.&lt;/p&gt;
&lt;table class="docutils footnote" frame="void" id="id2" rules="none"&gt;
&lt;colgroup&gt;&lt;col class="label"&gt;&lt;col&gt;&lt;/colgroup&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td class="label"&gt;&lt;a class="fn-backref" href="http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html#id1"&gt;[1]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Un article complet sur ssh (et PuTTY) est en préparation&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;&lt;/div&gt;</description><category>shinken</category><category>ssh</category><category>supervision</category><guid>http://hobgoblins-master.info/posts/check_by_ssh_wrapper.html</guid><pubDate>Sun, 27 Oct 2013 17:00:00 GMT</pubDate></item></channel></rss>