Exécuter

Fonction

Exécutez une commande ou un script shell en ligne (bash, perl, python) sur le collecteur configuré pour le travail 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 de la commande avec des arguments de commande facultatifs, soit via un script en ligne.

Alarmant

Temps 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 des utilisateurs de type Administrateur car elles permettent l'exécution de code arbitraire sur le collecteur ou server 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'active des commandes supplémentaires en utilisant par exemple sudo .

Exécuter le détail

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

Les travaux exécutés à distance ne peuvent pas envoyer de fichiers d'alarme au server . Les fichiers ne peuvent être traités que sur le collecteur , pas sur des systèmes distants

Lorsque vous sélectionnez le bouton radio Script en ligne, la boîte de dialogue change et permet de saisir du code de script dans une zone de texte plus grande :

Exécuter les paramètres

Paramètre

La description

Exécuter à distance

Cochez cette case pour exécuter la commande ou le script via ssh

Port SSH

Le port TCP sur lequel le server ssh écoute

Nom d'utilisateur

Un compte utilisateur existant sur la machine distante

Mot de passe

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

Exécuter

Programme:
Exécuter un seul exécutable

Script en ligne :
Exécutez un script entier (séquence de commandes), permettant d'alimenter la sortie du script avec les valeurs de retour individuelles, les valeurs de chaîne et le message d'information

Chemin du programme

Le chemin absolu de la commande (script ou binaire) à exécuter

Script en ligne

Une zone de texte dans laquelle des commandes et des scripts entiers peuvent être saisis. Les scripts en ligne sont exécutés à l'aide du shell /bin/sh par défaut, mais en utilisant des fonctions d'inclusion préexistantes (voir ci-dessous), les scripts bash, perl et python peuvent être utilisés (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 SKOOR et qu'aucun code externe ne doit être géré au niveau du système de fichiers.

Les commentaires peuvent être saisis avec un caractère dièse (#).

Dispute

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 entré ici est stocké sous /var/opt/run/eranger/ collecteur /tmp sur le collecteur SKOOR Engine et contiendra la sortie standard de la commande et/ou le contenu d'erreur standard. 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 contrôle 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 n'importe quel nombre 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 n'importe quel nombre 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. A n'utiliser que pour un ensemble limité de chaînes statiques connues, pas pour les chaînes qui changent très souvent (qui contiennent 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 , spécifiant ainsi un chemin de fichier relatif comme bin/script.sh à l'intérieur du script en ligne ou le chemin du programme fera référence à /var/opt/run/eranger/ collecteur /bin/script.sh .

Exécuter les fonctions d'inclusion pour bash, perl et python

La sélection du bouton radio Script en ligne permet de saisir un script dans la grande zone de texte. Les langages de script bash, perl et python sont pris en charge. Le travail d'exécution 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 pointant 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 3 langages de script dans la liste déroulante Balises :

Par exemple, l'ajout de l'élément de fonction sh/bash include ajoute le code suivant au script Inline :

Désormais, les fonctions suivantes peuvent être utilisées dans le script pour mapper des valeurs numériques et des chaînes afin de renvoyer des valeurs, des valeurs de chaîne et le message d'information :

Fonction

La description

setErangerValue

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

setErangerValues

Mappez 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

setErangerStringValuesetErangerStringValue

Mapper une seule chaîne à une valeur de chaîne identifiée par son index (1-n)

setErangerStringValues

Mappez plusieurs chaînes à des 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

Associer une valeur numérique ou une chaîne au contenu du message d'information de la tâche

addErangerInfoMessage

Ajouter 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 retournera 0

getLastErangerStringValue

Obtenir la valeur de chaîne de la dernière mesure par index (1-n). La fonction renverra une chaîne vide si maintenant la mesure précédente est disponible

outputErangerValues

Si des valeurs de retour, des valeurs de chaîne ou des contenus de message 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

La description

Durée de fonctionnement

Le temps qu'il a fallu pour exécuter la commande ou le 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 sur toutes les valeurs de retour configurées.

Valeur de chaîne <0-n>

Une valeur de chaîne. A n'utiliser que pour un ensemble limité de chaînes statiques connues, pas pour les chaînes qui changent très souvent (qui contiennent 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 de tâche générique (voir section Codes d'erreur de tâche )

Exécuter des exemples

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

Les paramètres suivants exécuteront la commande sudo pour exécuter un script pour redémarrer le service de rapport 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, entrez un nom de fichier dans la zone de texte Enregistrer la sortie dans le 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 de 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 :

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 des fonctions d'inclusion bash

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ées dans le script Inline. Dans l'exemple suivant, Nouvelle valeur et Différence ont été définies :

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

Sortie 2

Exemple 3 - Exécuter un script en ligne avec des fonctions d'inclusion bash et utiliser les propriétés personnalisées du travail en tant que variables de script

Ce qui suit exécutera 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 des 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 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 propriété nouvellement ajouté 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 tâche.

Ajoutez-le au travail d'exécution et renseignez 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 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 1 valeur de retour :

Le script renvoie la vitesse de téléchargement FTP en Ko/s, donc un diviseur doit être ajouté 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 entre les différents travaux.

Sortie 3

Exemple 4 - Exécuter un script en ligne avec des fonctions d'inclusion bash et en utilisant 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, donc aucun mot de passe n'est demandé lors de la connexion au serveur ssh server .

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 la commande à distance via ssh

L'exemple suivant utilise la case à cocher Exécuter à distance pour pouvoir saisir les identifiants 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 des é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 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 terminée si elle s'exécute plus de 45 secondes :

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