Eseguire

Funzione

Esegue un comando o uno script shell inline (bash, perl, python) sul collector configurato per il lavoro o su un host remoto specificato dall'indirizzo IP del dispositivo tramite ssh. Il comando da eseguire può essere immesso tramite il percorso del comando con argomenti opzionali o tramite uno script inline.

Allarme

Tempo di esecuzione, codice di uscita, valore di ritorno <0-n>, valore stringa <0-n>

I lavori di esecuzione possono essere creati/modificati solo dagli utenti di tipo Amministratore, poiché consentono l'esecuzione di codice arbitrario sul SKOOR Collector o sul SKOOR Server (nel caso del Collector locale).
L'eseguibile o il codice inserito nella casella di testo inline viene eseguito con le autorizzazioni dell'utente eranger. Pertanto, è possibile eseguire solo comandi limitati, a meno che l'amministratore Linux (root) non abiliti comandi aggiuntivi utilizzando ad esempio sudo.

Dettagli di esecuzione

Quando si seleziona la casella di controllo Esegui in remoto, la finestra di dialogo cambia e consente di inserire la porta ssh e le credenziali per eseguire il comando o lo script in remoto:

I lavori eseguiti in remoto non possono inviare file di allarme al server. I file possono essere elaborati solo sul collettore, non su sistemi remoti

Quando si seleziona il pulsante di opzione Script in linea, la finestra di dialogo cambia e consente di inserire il codice di scripting all'interno di una casella di testo più grande:

Parametri di esecuzione

Parametro

Descrizione

Esegui in remoto

Attivare questa casella di controllo per eseguire il comando o lo script tramite ssh

Porta SSH

La porta TCP su cui è in ascolto il server ssh

Nome utente

Un account utente esistente sul computer remoto

Password

Una password corretta per l'account utente sul computer remoto

Esegui

Programma:
eseguire un singolo eseguibile

Script inline:
esegue uno script completo (sequenza di comandi), consentendo di inviare l'output dello script ai singoli valori di ritorno, valori stringa e messaggi informativi

Percorso del programma

Il percorso assoluto del comando (script o binario) da eseguire

Script inline

Una casella di testo in cui è possibile inserire comandi e script completi. Gli script inline vengono eseguiti utilizzando la shell /bin/sh per impostazione predefinita, ma utilizzando funzioni di inclusione preesistenti (vedere sotto), è possibile utilizzare script bash, perl e python (vedere sotto). Uno dei vantaggi dell'aggiunta di script all'interno dello script inline è che questi vengono memorizzati nel database di configurazione SKOOR e non è necessario gestire codice esterno a livello di file system.

I commenti possono essere inseriti con il carattere cancelletto (#).

Argomento <n>

È possibile passare uno o più argomenti al comando. Fare clic sul pulsante + per aggiungere ulteriori argomenti.

Salva output su file

Per impostazione predefinita, il nome del file inserito qui viene memorizzato in /var/opt/run/eranger/collector/tmp sul SKOOR Engine Collector e conterrà l'output standard del comando e/o il contenuto dell'errore standard. Si consiglia vivamente di utilizzare un nome file univoco, ad esempio utilizzando il tag $ID$ che verrà sostituito dall'ID del lavoro (ad esempio my_output_$ID$.out). Se si utilizzano nomi di file semplici, può accadere che più lavori scrivano nello stesso file 

Sopprimere il tempo di esecuzione

Se questa casella di controllo è abilitata, il tempo di esecuzione di ogni controllo viene ignorato e non viene salvato nel database e il suo valore non è più visibile nella sezione dei valori. Il suo valore non è più disponibile per l'uso nelle specifiche dei limiti di allarme.

Codice di uscita

Il pulsante Unità consente di specificare un nome per il codice di uscita dell'eseguibile, nonché un'unità, un divisore, una descrizione e una precisione numerica.

Valori di ritorno

Consente di aggiungere un numero qualsiasi di valori di ritorno facendo clic sul pulsante +. Per ciascuno dei valori di ritorno, viene visualizzato un pulsante Unità che consente di specificare il nome del valore di ritorno, nonché la sua unità, il divisore, la descrizione e la precisione numerica (il numero di cifre decimali). Se non sono definiti valori di ritorno, viene letto solo il codice di uscita.

Valori stringa

Consente di aggiungere un numero qualsiasi di valori stringa facendo clic sul pulsante +. Per ciascuno dei valori stringa, viene visualizzato un pulsante Unità che consente di specificare il nome del valore stringa, nonché la sua unità e descrizione. Utilizzare solo per un insieme limitato di stringhe statiche note, non per stringhe che cambiano molto spesso (che contengono ad esempio l'ora e la data).

L'elenco a discesa Tag consente di inserire variabili predefinite nei campi sopra, ad esempio $NAME$ per il nome del lavoro.

La directory di lavoro dell'esecuzione dello script è /var/opt/run/eranger/collector, quindi specificando un percorso file relativo come bin/script.sh all'interno dello script Inline o del percorso Programma si farà riferimento a /var/opt/run/eranger/collector/bin/script.sh.

Esegui funzioni di inclusione per bash, perl e python

Selezionando il pulsante di opzione Script inline è possibile inserire uno script nella casella di testo grande. Sono supportati i linguaggi di scripting bash, perl e python. Il lavoro Execute offre varie funzioni include per questi linguaggi per mappare l'output dello script ai valori di ritorno, ai valori stringa e al messaggio informativo. Per poter utilizzare queste funzioni, è necessario prima includerle posizionando il cursore sulla prima riga della casella di testo Script inline e selezionando la funzione include corrispondente per uno dei 3 linguaggi di scripting dall'elenco a discesa Tag:

Ad esempio, aggiungendo la voce della funzione di inclusione sh/bash si aggiunge il seguente codice allo script inline:

Ora è possibile utilizzare le seguenti funzioni all'interno dello script per mappare valori numerici e stringhe a valori di ritorno, valori stringa e messaggi informativi:

Funzione

Descrizione

setErangerValue

Mappa un singolo valore numerico a un valore di ritorno identificato dal suo indice (1-n)

setErangerValues

Mappa più valori numerici a più valori di ritorno, aggiungendo valori di ritorno in base al numero di valori di input specificati

setErangerStringValue

Mappa una singola stringa a un valore stringa identificato dal suo indice (1-n)

setErangerStringValues

Mappa più stringhe su valori stringa, aggiungendo valori stringa in base al numero di stringhe di input specificate

setErangerInfoMessage

Mappa un valore numerico o una stringa al contenuto del messaggio informativo del lavoro

addErangerInfoMessage

Aggiungi un valore numerico o una stringa al contenuto del messaggio informativo del lavoro

getLastErangerValue

Ottiene il valore dall'ultima misurazione tramite indice (1-n). Se non sono disponibili misurazioni precedenti, la funzione restituisce 0

getLastErangerStringValue

Ottiene il valore stringa dall'ultima misurazione tramite indice (1-n). La funzione restituirà una stringa vuota se non è disponibile alcuna misurazione precedente

outputErangerValues

Se vengono aggiunti valori di ritorno, valori stringa o contenuti di messaggi informativi utilizzando le funzioni sopra indicate, questa funzione deve essere aggiunta come ultimo elemento nello script

Esegui valori e limiti di allarme

Valore / Limite di allarme

Descrizione

Tempo di esecuzione

Il tempo impiegato per eseguire il comando o lo script (tranne se disabilitato selezionando il parametro Sopprimi tempo di esecuzione)

Codice di uscita

Il codice di uscita del comando o dello script

Valore restituito <0-n>

Un valore numerico con precisione intera o in virgola mobile. È possibile definire limiti di allarme su tutti i valori di ritorno configurati.

Valore stringa <0-n>

Un valore stringa. Utilizzare solo per un insieme limitato di stringhe statiche note, non per stringhe che cambiano molto spesso (che contengono ad esempio l'ora e la data). È possibile definire limiti di allarme su tutti i valori stringa configurati.

Codice di errore

Codice di errore generico del lavoro (vedere la sezione Codici di errore del lavoro)

Esempi di esecuzione

Esempio 1 - Eseguire un singolo comando con più argomenti della riga di comando

I seguenti parametri eseguiranno il comando sudo per eseguire uno script per riavviare il servizio di report in SKOOR Engine:

Non è necessario definire valori di ritorno o stringhe, verrà controllato solo il codice di uscita del comando combinato.

Output 1

Se il comando non dovesse funzionare per qualche motivo, inserire un nome di file nella casella di testo del parametro Salva output su file:

L'output standard e/o l'errore standard del comando verranno reindirizzati in quel file. È possibile visualizzarlo dalla sezione dei valori del lavoro:

Fare clic sul pulsante Aggiorna file, il nome del file si trasforma in un collegamento:

Fare clic sul collegamento per visualizzare l'output del comando in una scheda o finestra separata del browser:

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  ]

Esempio 2 - Eseguire uno script inline con funzioni bash include

Contenuto della casella di testo dello script inline per un semplice calcolo di un numero casuale:

. /opt/eranger/collector/eranger_exec_values.sh

newValue=$RANDOM
lastValue=$(getLastErangerValue 1)

diffValue=$(expr $newValue - $lastValue)

setErangerValues $newValue $diffValue
outputErangerValues

È necessario definire due valori di ritorno come configurato nello script inline. Nell'esempio seguente, sono stati definiti Nuovo valore e Differenza:

Facendo clic sul pulsante Unità è possibile specificare i dettagli del valore:

Output 2

Esempio 3 - Eseguire uno script inline con funzioni bash include e utilizzando le proprietà personalizzate del lavoro come variabili dello script

Quanto segue eseguirà uno script specificato come variabile con argomenti script passati da una proprietà personalizzata. Lo script scarica un file specificato (argomento 2) da un server FTP (argomento 1).

La proprietà personalizzata per gli argomenti della riga di comando deve essere definita prima utilizzando il menu Admin. Fare clic sul pulsante Admin nell'angolo in alto a destra della vista di configurazione, quindi selezionare Proprietà personalizzate dall'elenco a discesa Cerca:


Fare clic sul pulsante + nella parte inferiore dello schermo. Viene visualizzata la sezione Proprietà aggiunte di recente:

Assegnare un nome alla proprietà personalizzata, quindi specificare che questa proprietà personalizzata deve essere disponibile solo per gli oggetti di lavoro:

Fare clic su Applica, quindi individuare l'ID della proprietà appena aggiunta passando con il mouse sul suo nome:

Esci dal menu Admin facendo nuovamente clic sul pulsante Admin nell'angolo in alto a destra. La proprietà personalizzata è ora disponibile per essere aggiunta a ogni processo.

Aggiungila al lavoro Esegui e compila i parametri della riga di comando per lo script a cui fa riferimento lo script Inline:

In questo caso ci sono 2 argomenti della riga di comando, delimitati da uno spazio.

Ora aggiungi il contenuto della casella di testo 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

Quindi aggiungi 1 valore di ritorno:

Lo script restituisce la velocità di download FTP in kB/s, quindi è necessario aggiungere un divisore per convertire in MBit/s.

Il vantaggio principale dell'utilizzo di proprietà personalizzate per alimentare gli argomenti è che è possibile riutilizzare lo stesso blocco di codice dello script inline per molti lavori utilizzando un modello di lavoro (vedere la sezione Modelli) e avere solo la proprietà personalizzata che differisce tra i vari lavori.

Output 3

Esempio 4 - Eseguire uno script inline con funzioni bash include e utilizzando una chiamata ssh remota

Il seguente script inline esegue un comando in remoto utilizzando il comando ssh. Si presume che l'autenticazione ssh sia già configurata utilizzando chiavi pubbliche senza password, quindi non viene richiesta alcuna password quando ci si connette al server ssh remoto.

Il comando legge il numero di processi ddclient in esecuzione in remoto. Viene utilizzata la variabile interna $DEVICE_ADDRESS$.

. /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

Aggiungere 1 valore di ritorno:

Output 4

Esempio 5 - Eseguire un comando in remoto tramite ssh

L'esempio seguente utilizza la casella di controllo Esegui in remoto per poter inserire le credenziali di autenticazione ssh ed eseguire un comando su una macchina remota:

Durante l'esecuzione in remoto non è possibile utilizzare valori di ritorno o valori stringa, ma viene controllato solo il codice di uscita.

Output 5

Esempio 6 - Esecuzione di una query WMI su un server Windows 2000 e lettura del relativo registro eventi

Utilizzare il seguente script inline:

. /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

Quindi aggiungere 2 valori di ritorno:


Output 6

Esempio 7 - Download wget con terminazione automatica dopo 45 secondi

Utilizzare la seguente notazione per assicurarsi che il comando esterno (wget in questo caso) venga terminato automaticamente se dura più di 45 secondi:

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