J’avais besoin de monitorer un serveur samba à distance (via ssh). Voilà une solution quick and dirty.
La machine à monitorer est milkpan
.
Sur milkpan
Créer un script check_smb
dans /usr/local/sbin
sur milkpan
:
#!/bin/sh
#set -x
# Nagios states
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
# Variables for end
RESULT=""
EXIT_STATUS=${STATE_UNKNOWN}
PROGNAME=`/usr/bin/basename $0`
SMBCLIENT="/usr/bin/smbclient"
GREP="/bin/grep"
USER=''
PASS=''
DOMAIN=WORKGROUP
# -- function: end script with output
endscript () {
echo ${RESULT}
exit ${EXIT_STATUS}
}
# -- function: usage of script
usage () {
echo "\
Nagios plugin to check if user can authenticate to domain
Usage:
${PROGNAME} -H <host> -U <username> -P <password>
${PROGNAME} --help
"
}
while [ -n "$1" ] # true if first argument is non-null
do
case $1 in
--help | -h )
usage
exit ${STATE_OK};;
-H )
shift
HOST=$1;;
-U )
shift
USER=$1;;
-P )
shift
PASS=$1;;
* )
usage
exit ${STATE_UNKNOWN};;
esac
shift # if there is no shift, script will continue with host as null
done
if [ "$HOST" = "" -o "$USER" = "" -o "$PASS" = "" ]; then
usage
RESULT="Undefined parameter(s)";
EXIT_STATUS=${STATE_UNKNOWN}
endscript
fi
OUTPUT=`${SMBCLIENT} //${HOST}/homes -c "pwd" -U ${USER}%${PASS} -W ${DOMAIN} 2>&1 |${GREP} Domain=`
if [ "$?" -eq "0" ]
then
RESULT="OK Authentication successful on ${OUTPUT}"
EXIT_STATUS=${STATE_OK}
else
RESULT="Authentication failed on ${DOMAIN}: ${OUTPUT}"
EXIT_STATUS=${STATE_CRITICAL}
fi
endscript
Ce script est basé sur http://www.googlux.com/nagios_smbcheck.html
Définir le mot de passe pour nobody
:
sudo smbpasswd nobody
Définir les droits pour ce script :
sudo chmod 755 /usr/local/sbin/check_smb
Sur la machine qui héberge le Nagios
Ajouter une commande :
define command {
command_name check_ssh_smb
command_line $USER1$/check_by_ssh -H $HOSTADDRESS$ -l $USER10$ -i ~/.ssh/id_rsa -C "/usr/local/sbin/check_smb -H $ARG1$ -U $ARG2$ -P $ARG3$"
}
Et un service qui utilise cette commande :
define service {
service_description samba
use generic-service
host_name milkpan
check_command check_ssh_smb!10.8.0.1!nobody!MyPassW0rd
}
Les paramètres passés sont :
10.8.0.1
: le sous-réseau sur lequel écoute le samba sur cette machinenobody
: l’utilisateur qui se connecteMyPassW0rd
: son mot de passe