Exécuter

Fonction

Exécuter une commande ou un script shell en ligne (bash, perl, python) sur le collecteur configuré pour la tâche ou sur un hôte distant spécifié par l'adresse IP de l'appareil via ssh. La commande qui doit être exécutée peut être saisie soit par le chemin de la commande avec des arguments de commande facultatifs, soit par un script en ligne.

Alarme

Durée d'exécution, code de sortie, valeur de retour <0-n>, valeur de la chaîne <0-n>.

Les jobs d'exécution ne peuvent être créés/édités que par des utilisateurs de type Administrateur car ils permettent d'exécuter un code arbitraire sur le collecteur ou le serveur SKOOR (dans le cas du collecteur-local).
L'exécutable ou le code saisi dans la zone de texte en ligne est exécuté avec les autorisations de l'utilisateur eranger. Par conséquent, seules des commandes limitées peuvent être exécutées, à moins que l'administrateur Linux (root) n'autorise des commandes supplémentaires en utilisant, par exemple, sudo.

Exécuter en détail

Lorsque vous cochez la case Exécuter à distance, la boîte de dialogue change et permet d'entrer le port ssh et les informations d'identification pour exécuter la commande ou le script à distance :

Les tâches exécutées à distance ne peuvent pas envoyer de fichiers d'alarme au serveur. Les fichiers ne peuvent être traités que sur le collecteur, et non sur des systèmes distants.

Lorsque l'on sélectionne le bouton radio Inline script, la boîte de dialogue change et permet de saisir le code du script dans une zone de texte plus grande :

Paramètres d'exécution

Paramètre

Paramètre Description

Exécuter à distance

Activez cette case à cocher pour exécuter la commande ou le script via ssh

Port SSH

Le port TCP sur lequel le serveur ssh écoute.

Nom d'utilisateur

Un compte d'utilisateur existant sur la machine distante

Mot de passe

Un mot de passe correct pour le compte d'utilisateur sur la machine distante

Exécuter

Programme :
Exécuter un seul exécutable

Script en ligne :
Exécuter un script entier (séquence de commandes), ce qui permet d'introduire la sortie du script dans les valeurs de retour individuelles, les valeurs de chaîne et le message d'information.

Chemin d'accès au programme

Chemin absolu de la commande (script ou binaire) à exécuter.

Script en ligne

Zone de texte dans laquelle des commandes et des scripts entiers peuvent être saisis. Les scripts en ligne sont exécutés par défaut à l'aide de l'interpréteur de commandes /bin/sh, mais il est possible d'utiliser des fonctions include préexistantes (voir ci-dessous), ainsi que des scripts bash, perl et python (voir ci-dessous). L'un des avantages de l'ajout de scripts dans le script Inline est qu'ils sont stockés dans la base de données de configuration de SKOOR et qu'aucun code externe n'a besoin d'être géré au niveau du système de fichiers.

Les commentaires peuvent être saisis à l'aide du caractère dièse (#).

Argument <n>

Un ou plusieurs arguments peuvent être transmis à la commande. Cliquez sur le bouton + pour ajouter des arguments supplémentaires.

Enregistrer la sortie dans un fichier

Par défaut, le nom de fichier saisi ici est stocké sous /var/opt/run/eranger/collector/tmp sur le collecteur SKOOR Engine et contiendra le contenu de la sortie standard et/ou de l'erreur standard de la commande. Il est fortement recommandé d'utiliser un nom de fichier unique, par exemple en utilisant la balise $ID$ qui sera remplacée par l'identifiant du travail (par exemple my_output_$ID$.out). Si des noms de fichiers simples sont utilisés, il peut arriver que plusieurs travaux écrivent dans le même fichier.

Supprimer le temps d'exécution

Si cette case à cocher est activée, la durée d'exécution de chaque contrôle est ignorée et n'est pas enregistrée dans la base de données ; sa valeur n'est plus visible dans la section des valeurs. Sa valeur n'est plus visible dans la section des valeurs. Sa valeur n'est également plus disponible pour être utilisée dans les spécifications des limites d'alarme.

Code de sortie

Le bouton Unité permet de spécifier un nom pour le code de sortie de l'exécutable, ainsi qu'une unité, un diviseur, une description et une précision numérique.

Valeurs de retour

Permet d'ajouter un nombre quelconque de valeurs de retour en cliquant sur le bouton +. Pour chacune des valeurs de retour, un bouton Unité apparaît et permet de spécifier le nom de la valeur de retour ainsi que son unité, son diviseur, sa description et sa précision numérique (le nombre de décimales). Si aucune valeur de retour n'est définie, seul le code de sortie est lu.

Valeurs de chaîne

Permet d'ajouter un nombre quelconque de valeurs de chaînes de caractères en cliquant sur le bouton +. Pour chacune des valeurs de chaîne, un bouton Unité apparaît et permet de spécifier le nom de la valeur de chaîne ainsi que son unité et sa description. A n'utiliser que pour un ensemble limité de chaînes statiques connues, et non pour des chaînes qui changent très souvent (qui contiennent par exemple l'heure et la date).

La liste déroulante Tags permet de saisir des variables prédéfinies dans les champs ci-dessus, par exemple $NAME$ pour le nom du travail.

Le répertoire de travail de l'exécution du script est /var/opt/run/eranger/collector. Par conséquent, la spécification d'un chemin de fichier relatif tel que bin/script.sh dans le script Inline ou le chemin du programme fera référence à /var/opt/run/eranger/collector/bin/script.sh.

Exécuter les fonctions include pour bash, perl et python

La sélection du bouton radio Inline script permet de saisir un script dans la grande zone de texte. Les langages de script Bash, perl et python sont pris en charge. La tâche Exécuter propose diverses fonctions d'inclusion pour ces langages afin de faire correspondre la sortie du script aux valeurs de retour, aux valeurs de chaîne et au message d'information. Pour pouvoir utiliser ces fonctions, il faut d'abord les inclure en pointant le curseur sur la première ligne de la zone de texte Inline script et en sélectionnant la fonction include correspondante pour l'un des trois langages de script dans la liste déroulante Tags :

Par exemple, l'ajout de la fonction d'inclusion sh/bash ajoute le code suivant au script Inline:

Les fonctions suivantes peuvent désormais être utilisées dans le script pour associer des valeurs numériques et des chaînes à des valeurs de retour, à des valeurs de chaîne et au message d'information :

Fonction

Description de la fonction

setErangerValue

Associe une valeur numérique unique à une valeur de retour identifiée par son index (1-n)

setErangerValues

Associe plusieurs valeurs numériques à plusieurs valeurs de retour, en ajoutant des valeurs de retour en fonction du nombre de valeurs d'entrée spécifiées.

setErangerStringValue

Correspondance entre une chaîne de caractères unique et une valeur de chaîne de caractères identifiée par son indice (1-n)

setErangerStringValues

Transforme plusieurs chaînes en valeurs de chaîne, en ajoutant des valeurs de chaîne en fonction du nombre de chaînes d'entrée spécifiées.

setErangerInfoMessage

Correspond à une valeur numérique ou à une chaîne de caractères dans le contenu du message d'information du travail.

addErangerInfoMessage

Ajoute une valeur numérique ou une chaîne de caractères au contenu du message d'information du travail.

getLastErangerValue

Obtenir la valeur de la dernière mesure par index (1-n). Si aucune mesure antérieure n'est disponible, la fonction renvoie 0.

getLastErangerStringValue

Obtenir la valeur de la chaîne de caractères de la dernière mesure par l'index (1-n). La fonction renvoie une chaîne vide si aucune mesure antérieure n'est disponible.

outputErangerValues

Si des valeurs de retour, des valeurs de chaîne ou des contenus de messages d'information sont ajoutés à l'aide des fonctions ci-dessus, cette fonction doit être ajoutée en tant que dernier élément du script.

Valeurs d'exécution et limites d'alarme

Valeur / Limite d'alarme

Description de la valeur

Temps d'exécution

Temps d'exécution de la commande ou du script (sauf s'il est désactivé en cochant le paramètre Supprimer le temps d'exécution ).

Code de sortie

Le code de sortie de la commande ou du script

Valeur de retour <0-n>

Une valeur numérique avec une précision entière ou en virgule flottante. Des limites d'alarme peuvent être définies pour toutes les valeurs de retour configurées.

Valeur de chaîne <0-n>

Valeur de chaîne de caractères. À utiliser uniquement pour un ensemble limité de chaînes statiques connues, et non pour des chaînes qui changent très souvent (qui contiennent par exemple l'heure et la date). Des limites d'alarme peuvent être définies pour toutes les valeurs de chaîne configurées.

Code d'erreur

Code d'erreur générique du travail (voir la section Codes d'erreur du travail)

Exemples d'exécution

Exemple 1 - Exécuter une commande unique avec plusieurs arguments de ligne de commande

Les paramètres suivants permettront d'exécuter la commande sudo afin de lancer un script pour redémarrer le service de rapports dans SKOOR Engine :

Aucune valeur de retour ou de chaîne ne doit être définie, seul le code de sortie de la commande combinée sera vérifié.

Sortie 1

Si la commande ne fonctionne pas pour une raison quelconque, saisissez un nom de fichier dans la zone de texte Enregistrer la sortie dans un fichier:

La sortie standard et/ou l'erreur standard de la commande seront redirigées vers ce fichier. Il peut être consulté dans la section des valeurs du travail :

Cliquez sur le bouton Mettre à jour le fichier, le nom du fichier se transforme en lien :

Cliquez sur le lien pour afficher la sortie de la commande dans un onglet ou une fenêtre distincte du navigateur :

Running /opt/eranger/bin/eRanger.sh with root privileges...
eRanger Server installation...
waiting up to 15 seconds for 7090 to terminate 

Stopping eranger-report[  OK  ]
Starting eranger-report[  OK  ]

Exemple 2 - Exécuter un script Inline avec les fonctions include de bash

Contenu d'une zone de texte d'unscript Inline pour un simple calcul d'un nombre aléatoire :

. /opt/eranger/collector/eranger_exec_values.sh

newValue=$RANDOM
lastValue=$(getLastErangerValue 1)

diffValue=$(expr $newValue - $lastValue)

setErangerValues $newValue $diffValue
outputErangerValues

Deux valeurs de retour doivent être définies comme configurées dans le script Inline. Dans l'exemple suivant, New Value et Difference ont été définies :

Cliquer sur le bouton Unité permet de spécifier les détails de la valeur :

Sortie 2

Exemple 3 - Exécution d'un script en ligne avec des fonctions bash include et utilisation des propriétés personnalisées du travail comme variables de script

L'exemple suivant permet d'exécuter un script spécifié en tant que variable avec des arguments de script transmis à partir d'une propriété personnalisée. Le script télécharge un fichier spécifié (argument 2) à partir d'un serveur FTP (argument 1).

La propriété personnalisée pour les arguments de la ligne de commande doit d'abord être définie à l'aide du menu Admin. Cliquez sur le bouton Admin dans le coin supérieur droit de la vue de configuration, puis sélectionnez Propriétés personnalisées dans la liste déroulante Recherche:


Cliquez sur le bouton + en bas de l'écran. Une section Propriétés nouvellement ajoutées s'affiche :

Donnez un nom à la propriété personnalisée, puis indiquez que cette propriété personnalisée ne doit être disponible que pour les objets de travail :

Cliquez sur Appliquer, puis recherchez l'ID de la propriété nouvellement ajoutée en survolant son nom avec la souris :

Quittez le menu Admin en cliquant à nouveau sur le bouton Admin dans le coin supérieur droit. La propriété personnalisée est maintenant disponible pour être ajoutée à chaque travail.

Ajoutez-la à la tâche Exécuter et remplissez le(s) paramètre(s) de ligne de commande pour le script référencé dans le script Inline:

Dans ce cas, il y a 2 arguments de ligne de commande, délimités par un espace.

Ajoutez maintenant le contenu de la zone de texte du script Inline:

. /opt/eranger/collector/eranger_exec_values.sh

SCRIPT="/var/opt/run/eranger/bin/ftp_download_local.sh"

PARAMS="$OID_74$"

VALUE=$(${SCRIPT} ${PARAMS})
setErangerValue 1 $VALUE
outputErangerValues

Ajoutez ensuite 1 valeur de retour :

Le script renvoie la vitesse de téléchargement FTP en kB/s, il faut donc ajouter un diviseur pour convertir en MBit/s.

Le principal avantage de l'utilisation de propriétés personnalisées pour alimenter les arguments est que l'on peut réutiliser le même bloc de code de script Inline pour de nombreux travaux à l'aide d'un modèle de travail (voir la section Modèles) et que seule la propriété personnalisée diffère d'un travail à l'autre.

Sortie 3

Exemple 4 - Exécution d'un script Inline avec des fonctions bash include et en utilisant un appel ssh à distance

Le script en ligne suivant exécute une commande à distance à l'aide de la commande ssh. L'hypothèse est que l'authentification ssh est déjà configurée à l'aide de clés publiques sans mot de passe, de sorte qu'aucun mot de passe n'est demandé lors de la connexion au serveur ssh distant.

La commande lit le nombre de processus ddclient exécutés à distance. La variable interne $DEVICE_ADDRESS$ est utilisée.

. /opt/eranger/collector/eranger_exec_values.sh

cmd="ps -u root | grep 'ddclient - ' | wc -l"
num_procs=$(ssh -o ConnectTimeout=15 -o ConnectionAttempts=1 eranger@$DEVICE_ADDRESS$ "$cmd")

setErangerValue 1 $num_procs
outputErangerValues

Ajouter 1 valeur de retour :

Sortie 4

Exemple 5 - Exécuter une commande à distance via ssh

L'exemple suivant utilise la case à cocher Exécuter à distance pour pouvoir entrer les informations d'authentification ssh et exécuter une commande sur une machine distante :

Aucune valeur de retour ou valeur de chaîne ne peut être utilisée lors de l'exécution à distance, seul le code de sortie est vérifié.

Sortie 5

Exemple 6 - Exécuter une requête WMI sur un serveur Windows 2000 et lire son journal d'événements

Utilisez le script Inline suivant :

. /opt/eranger/collector/eranger_exec_values.sh

# this does a wmi query to windows 2000 servers
# for server 2003 upwards, use the dedicated "Agent Eventlog"
# job plugin directly.
# for the query to work, port tcp135 and the portrange tcp1025-tcp65535 
# must be accessible from this collector to the remote windows server

# BEWARE: when querying the eventlog for lots of events, especially events
# of severity 3, the query can take a very long time, sometimes hours.
# However, the maximum allowed runtime of a SKOOR execute job is merely 5
# minutes after which the job will kill this script and exit with a warning

# login credentials for wmi query (needs to be either an administrator 
# account or must have sufficient privileges to do remote wmi queries

USER=skoor
PWD=<fill in password here>

# Filter parameters (uncomment only parameters that are used)

# Logfile can be \'Application\', \'Security', 
# \'System\', or e.g. \'CustomEventLog\'
Logfile=\'Application\'

# Event source (always enclose in \'....\')
SourceName=\'FEP\'

# Event ID
#EventCode=203

# Severity (1=Error, 2=Warning, 3=Information, 
# 4=Security Audit Success, 5=Security Audit Failure)
EventType=1

# Event description (find events that contain the following string(s) 
# anywhere in the event description)
#Message='string1'
#Message='string1|string2' (for filtering multiple strings inside message field, use pipe delimiter)
Message='WSAECONNREFUSED'

# search only events which have been logged
# during the last XXX minutes (always adapt 
# to job execution interval)
Maxage=3

################################################3

Maxagesec=$((Maxage*60))
Tepoch=$(date +%s)
Tstart=$((Tepoch-Maxagesec))
# get start time in UTC
Tstart_datetime=\'$(date -u -d @$Tstart +%Y%m%d%H%M00.000000+000)\'

# construct query
Query="Select Logfile,Message,RecordNumber from Win32_NTLogEvent where Logfile=${Logfile} and TimeWritten>${Tstart_datetime}"
[ ! -z "${SourceName}" ] && Query+=" and SourceName=${SourceName}"
[ ! -z "${EventCode}" ] && Query+=" and EventCode=${EventCode}"
[ ! -z "${EventType}" ] && Query+=" and EventType=${EventType}"
echo "WMI Query is ${Query}"

wmic -U ${USER}%${PWD} //$DEVICE_ADDRESS$ "${Query}" > $DEVICE_NAME$_$ID$_eventlog.out
RC=$?

if [ ! -z "${Message}" ]; then
   Eventcount=$(grep -v dcerpc_connect $DEVICE_NAME$_$ID$_eventlog.out | grep -v 'Login to remote object' | egrep ${Message} | wc -l)
else
   Eventcount=$(grep -v dcerpc_connect $DEVICE_NAME$_$ID$_eventlog.out | grep -v 'Login to remote object' | wc -l)
fi

setErangerValue 1 $Eventcount
setErangerValue 2 $RC
outputErangerValues

Ajoutez ensuite 2 valeurs de retour :


Sortie 6

Exemple 7 - Téléchargement de wget avec arrêt automatique après 45 secondes

Utilisez la notation suivante pour vous assurer que la commande externe (wget dans ce cas) est automatiquement interrompue si elle dure plus de 45 secondes :

(sleep 45; kill -9 -$$) &
wget -O /dev/null http://www.debian.org/netinst.iso