Exécuter
Fonction | Exécutez 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 à exécuter peut être saisie soit par le chemin d'accès de la commande avec des arguments facultatifs, soit via un script en ligne. |
|---|---|
Alarme | Durée d'exécution, code de sortie, valeur de retour <0-n>, valeur de chaîne <0-n> |
Les tâches d'exécution ne peuvent être créées/modifiées que par les utilisateurs de type Administrateur, car elles permettent d'exécuter du code arbitraire sur le collecteur SKOOR ou le server (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'active des commandes supplémentaires à l'aide, par exemple, de sudo.
Détails d'exécution
Lorsque vous cochez la case Exécuter à distance, la boîte de dialogue change et vous permet de saisir 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 server. Les fichiers ne peuvent être traités que sur le collecteur, et non sur des systèmes distants.
Lorsque vous sélectionnez le bouton radio Script en ligne, la boîte de dialogue change et vous permet de saisir le code de script dans une zone de texte plus grande :
Paramètres d'exécution
Paramètre | Description |
|---|---|
Exécuter à distance | Cochez cette case pour exécuter la commande ou le script via ssh |
Port SSH | Port TCP sur lequel le server ssh est à l'écoute |
Nom d'utilisateur | Compte utilisateur existant sur la machine distante |
Mot de passe | Mot de passe correct pour le compte utilisateur sur la machine distante |
Exécuter | Programme : Script en ligne : |
Chemin d'accès au programme | Chemin d'accès absolu à la commande (script ou binaire) à exécuter |
Script en ligne | Zone de texte dans laquelle vous pouvez saisir des commandes et des scripts complets. Les scripts en ligne sont exécutés par défaut à l'aide du shell /bin/sh, mais vous pouvez également utiliser les fonctions d'inclusion préexistantes (voir ci-dessous) et les scripts bash, perl et python (voir ci-dessous). L'un des avantages de l'ajout de scripts dans le script en ligne est qu'ils sont stockés dans la base de données de configuration SKOOR et qu'aucun code externe ne doit ê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 passés à 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 la sortie standard et/ou le contenu d'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 tâches écrivent dans le même fichier. |
Supprimer le temps d'exécution | Si cette case est cochée, le temps d'exécution de chaque vérification est ignoré et n'est pas enregistré dans la base de données, et 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 de limite 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 illimité 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 illimité de valeurs de chaîne 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. À utiliser uniquement pour un ensemble limité de chaînes statiques connues, et non pour des chaînes qui changent très souvent (contenant par exemple l'heure et la date). |
La liste déroulante Balises 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/collecteur. Ainsi, spécifier un chemin d'accès relatif tel que bin/script.sh dans le script Inline ou le chemin d'accès au programme fera référence à /var/opt/run/eranger/collecteur/bin/script.sh.
Exécutez les fonctions d'inclusion pour bash, perl et python
En sélectionnant le bouton radio Script en ligne, vous pouvez 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 offre diverses fonctions d'inclusion pour ces langages afin de mapper la sortie du script aux valeurs de retour, aux valeurs de chaîne et au message d'information. Pour pouvoir utiliser ces fonctions, elles doivent d'abord être incluses en plaçant le curseur sur la première ligne de la zone de texte Script en ligne et en sélectionnant la fonction d'inclusion correspondante pour l'un des trois langages de script dans la liste déroulante Balises :
Par exemple, l'ajout de l'élément de fonction d'inclusion sh/bash ajoute le code suivant au script en ligne :
Les fonctions suivantes peuvent désormais être utilisées dans le script pour mapper les valeurs numériques et les chaînes de caractères aux valeurs de retour, aux valeurs de chaîne et au message d'information :
Fonction | Description |
|---|---|
setErangerValue | Mapper une seule valeur numérique à une valeur de retour identifiée par son index (1-n) |
setErangerValues | Mapper 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 | Mapper une chaîne unique à une valeur de chaîne identifiée par son index (1-n) |
setErangerStringValues | Mapper plusieurs chaînes de caractères à des valeurs de chaîne, en ajoutant des valeurs de chaîne en fonction du nombre de chaînes de caractères d'entrée spécifiées |
setErangerInfoMessage | Mapper une valeur numérique ou une chaîne au contenu du message d'information du travail |
addErangerInfoMessage | Ajoute une valeur numérique ou une chaîne au contenu du message d'information de la tâche |
getLastErangerValue | Obtenir la valeur de la dernière mesure par index (1-n). Si aucune mesure précédente n'est disponible, la fonction renvoie 0 |
getLastErangerStringValue | Récupère la valeur de chaîne de la dernière mesure par index (1-n). La fonction renvoie une chaîne vide si aucune mesure précédente n'est disponible |
outputErangerValues | Si des valeurs de retour, des valeurs de chaîne ou le contenu 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. |
Exécuter les valeurs et les limites d'alarme
Valeur / Limite d'alarme | Description |
|---|---|
Durée d'exécution | Temps nécessaire à l'exécution de la commande ou du script (sauf si cette option est désactivée en cochant le paramètre Supprimer le temps d'exécution) |
Code de sortie | Code de sortie de la commande ou du script |
Valeur de retour <0-n> | Valeur numérique avec précision entière ou à virgule flottante. Des limites d'alarme peuvent être définies sur toutes les valeurs de retour configurées. |
Valeur de chaîne <0-n> | Une valeur de chaîne. À utiliser uniquement pour un ensemble limité de chaînes statiques connues, et non pour des chaînes qui changent très souvent (contenant par exemple l'heure et la date). Des limites d'alarme peuvent être définies sur toutes les valeurs de chaîne configurées. |
Code d'erreur | Code d'erreur générique de tâche (voir la section Codes d'erreur de tâche) |
Exemples d'exécution
Exemple 1 - Exécuter une seule commande avec plusieurs arguments de ligne de commande
Les paramètres suivants exécuteront la commande sudo pour lancer un script permettant de redémarrer le service de rapport dans SKOOR Engine :
Aucune valeur de retour ou 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, entrez un nom de fichier dans la zone de texte du paramètre 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é à partir de la section Valeur 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 de navigateur distinct(e) :
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 en ligne avec les fonctions bash include
Contenu de la zone de texte du script en ligne pour un calcul simple 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é dans le script en ligne. Dans l'exemple suivant, New Value et Difference ont été définis :
Cliquez sur le bouton Unité pour spécifier les détails de la valeur :
Sortie 2
Exemple 3 - Exécuter un script en ligne avec les fonctions d'inclusion bash et en utilisant les propriétés personnalisées du travail comme variables de script
Ce qui suit exécute 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 server FTP (argument 1).
La propriété personnalisée pour les arguments de 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 Rechercher :
Cliquez sur le bouton + en bas de l'écran. Une section Propriétés nouvellement ajoutées apparaît :
Donnez un nom à la propriété personnalisée, puis spécifiez 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 passant la souris sur son nom :
Quittez le menu Admin en cliquant à nouveau sur le bouton Admin dans le coin supérieur droit. La propriété personnalisée peut désormais être ajoutée à chaque tâche.
Ajoutez-la à la tâche Exécuter et remplissez le ou les paramètres de ligne de commande pour le script référencé dans le script en ligne :
Dans ce cas, il y a deux arguments de ligne de commande, séparés par un espace.
Ajoutez maintenant le contenu de la zone de texte Script en ligne :
. /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 une valeur de retour :
Le script renvoie la vitesse de téléchargement FTP en kB/s, il faut donc ajouter un diviseur pour la 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 en ligne pour de nombreux travaux à l'aide d'un modèle de travail (voir la section Modèles) et ne faire varier que la propriété personnalisée entre les différents travaux.
Sortie 3
Exemple 4 - Exécuter un script en ligne avec des fonctions bash include et à l'aide d'un appel ssh distant
Le script Inline 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 server ssh distant.
La commande lit le nombre de processus ddclient s'exécutant à 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 saisir 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 server Windows 2000 et lire son journal d'événements
Utilisez le script en ligne 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 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 s'exécute pendant plus de 45 secondes :
(sleep 45; kill -9 -$$) & wget -O /dev/null http://www.debian.org/netinst.iso


























