Ausführen
Funktion | Führt einen Befehl oder ein Inline-Shell-Skript (bash, perl, python) auf dem für den Auftrag konfigurierten Kollektor oder auf einem durch die IP-Adresse des Geräts spezifizierten Remote-Host über ssh aus. Der auszuführende Befehl kann entweder über den Befehlspfad mit optionalen Befehlsargumenten oder über ein Inline-Skript eingegeben werden. |
---|---|
Alarmierung | Laufzeit, Exit-Code, Rückgabewert <0-n>, String-Wert <0-n> |
Ausführungsaufträge dürfen nur von Benutzern des Typs Administrator erstellt/bearbeitet werden, da sie die Ausführung von beliebigem Code auf dem SKOOR Collector oder Server (im Falle des Collector-Local) erlauben.
Die ausführbare Datei oder der Code, der in das Inline-Textfeld eingegeben wird, wird mit den Rechten des gefährdeten Benutzers ausgeführt. Daher können nur begrenzte Befehle ausgeführt werden, es sei denn, der Linux-Administrator (root) schaltet zusätzliche Befehle z.B. mit sudo frei.
Ausführen Detail
Wenn Sie das Kontrollkästchen Fernausführen aktivieren, ändert sich der Dialog und ermöglicht die Eingabe des ssh-Ports und der Anmeldedaten, um den Befehl oder das Skript aus der Ferne auszuführen:
Entfernt ausgeführte Aufträge können keine Alarmdateien an den Server senden. Die Dateien können nur auf dem Kollektor verarbeitet werden, nicht auf entfernten Systemen.
Wenn Sie das Optionsfeld Inline-Skript auswählen, ändert sich der Dialog und ermöglicht die Eingabe von Skriptcode in einem größeren Textfeld:
Ausführungsparameter
Parameter | Beschreibung |
---|---|
Entfernt ausführen | Aktivieren Sie dieses Kontrollkästchen, um den Befehl oder das Skript über ssh auszuführen |
SSH-Anschluss | Der TCP-Port, an dem der ssh-Server lauscht |
Benutzername | Ein bestehendes Benutzerkonto auf dem entfernten Rechner |
Kennwort | Ein korrektes Passwort für das Benutzerkonto auf dem entfernten Rechner |
Ausführen von | Programm: Inline-Skript: |
Programm-Pfad | Der absolute Pfad zu dem auszuführenden Befehl (Skript oder Binärdatei) |
Inline-Skript | Ein Textfeld, in das Befehle und ganze Skripte eingegeben werden können. Inline-Skripte werden standardmäßig mit der Shell /bin/sh ausgeführt, aber mit Hilfe bereits vorhandener Include-Funktionen (siehe unten) können auch Bash-, Perl- und Python-Skripte verwendet werden (siehe unten). Ein Vorteil des Hinzufügens von Skripten innerhalb des Inline-Skripts ist, dass sie in der SKOOR-Konfigurationsdatenbank gespeichert werden und kein externer Code auf Dateisystemebene verwaltet werden muss. Kommentare können mit einem Rautezeichen (#) eingegeben werden. |
Argument <n> | Es können ein oder mehrere Argumente an den Befehl übergeben werden. Klicken Sie auf die Schaltfläche +, um weitere Argumente hinzuzufügen. |
Ausgabe in Datei speichern | Standardmäßig wird der hier eingegebene Dateiname unter /var/opt/run/eranger/collector/tmp auf dem SKOOR Engine Collector gespeichert und enthält die Standardausgabe und/oder den Standardfehlerinhalt des Befehls. Es wird dringend empfohlen, einen eindeutigen Dateinamen zu verwenden, z.B. durch Verwendung des $ID$-Tags, das durch die Job-ID ersetzt wird (z.B. my_output_$ID$.out). Wenn einfache Dateinamen verwendet werden, kann es vorkommen, dass mehrere Jobs in dieselbe Datei schreiben. |
Laufende Zeit unterdrücken | Wenn dieses Kontrollkästchen aktiviert ist, wird die Laufzeit jeder Prüfung ignoriert und nicht in der Datenbank gespeichert, und ihr Wert ist im Wertebereich nicht mehr sichtbar. Ihr Wert steht auch nicht mehr für die Angabe von Alarm Limits zur Verfügung. |
Exit-Code | Die Schaltfläche Einheit ermöglicht die Angabe eines Namens für den Exit-Code der ausführbaren Datei sowie einer Einheit, eines Divisors, einer Beschreibung und einer numerischen Genauigkeit. |
Rückgabewerte | Ermöglicht das Hinzufügen einer beliebigen Anzahl von Rückgabewerten durch Klicken auf die Schaltfläche +. Für jeden Rückgabewert wird eine Schaltfläche Einheit angezeigt, mit der Sie den Namen des Rückgabewerts sowie seine Einheit, den Divisor, die Beschreibung und die numerische Genauigkeit (die Anzahl der Dezimalstellen) angeben können. Wenn keine Rückgabewerte definiert sind, wird nur der Exit-Code gelesen. |
String-Werte | Ermöglicht das Hinzufügen einer beliebigen Anzahl von String-Werten durch Klicken auf die Schaltfläche +. Für jeden der String-Werte erscheint eine Schaltfläche Einheit, mit der Sie den Namen des String-Werts sowie seine Einheit und Beschreibung angeben können. Verwenden Sie diese Option nur für eine begrenzte Anzahl bekannter statischer Zeichenfolgen, nicht für Zeichenfolgen, die sich sehr häufig ändern (z. B. Uhrzeit und Datum). |
Die Dropdown-Liste Tags ermöglicht die Eingabe von vordefinierten Variablen in die obigen Felder, z. B. $NAME$ für den Namen des Jobs.
Das Arbeitsverzeichnis der Skriptausführung ist /var/opt/run/eranger/collector, daher verweist die Angabe eines relativen Dateipfads wie bin/script.sh innerhalb des Inline-Skripts oder des Programmpfads auf /var/opt/run/eranger/collector/bin/script.sh.
Ausführen von Include-Funktionen für bash, perl und python
Wenn Sie das Optionsfeld Inline-Skript auswählen, können Sie ein Skript in das große Textfeld eingeben. Unterstützt werden die Skriptsprachen Bash, perl und python. Der Execute-Job bietet verschiedene Include-Funktionen für diese Sprachen, um die Skriptausgabe auf Rückgabewerte, String-Werte und die Info-Meldung abzubilden. Um diese Funktionen nutzen zu können, müssen sie zunächst eingebunden werden, indem Sie den Cursor auf die erste Zeile im Textfeld Inline-Skript setzen und die entsprechende Include-Funktion für eine der drei Skriptsprachen aus der Dropdown-Liste Tags auswählen:
Das Hinzufügen der Include-Funktion sh/bash beispielsweise fügt dem Inline-Skript den folgenden Code hinzu:
Jetzt können die folgenden Funktionen innerhalb des Skripts verwendet werden, um numerische Werte und Zeichenketten auf Rückgabewerte, Zeichenkettenwerte und die Infomeldung zu übertragen:
Funktion | Beschreibung |
---|---|
setErangerValue | Zuordnung eines einzelnen numerischen Wertes zu einem Rückgabewert, der durch seinen Index (1-n) identifiziert wird |
setErangerValues | Mehrere numerische Werte auf mehrere Rückgabewerte abbilden, wobei die Rückgabewerte entsprechend der Anzahl der angegebenen Eingabewerte hinzugefügt werden |
setErangerStringValue | Abbildung einer einzelnen Zeichenkette auf einen durch ihren Index (1-n) identifizierten Zeichenkettenwert |
setErangerStringValues | Zuordnung mehrerer Zeichenketten zu Zeichenkettenwerten, wobei Zeichenkettenwerte entsprechend der Anzahl der angegebenen Eingabestrings hinzugefügt werden |
setErangerInfoMessage | Zuordnung eines numerischen Wertes oder einer Zeichenkette zum Inhalt der Info-Meldung des Auftrags |
addErangerInfoMessage | Hinzufügen eines numerischen Wertes oder einer Zeichenkette zum Inhalt der Job-Infomeldung |
getLastErangerValue | Holt den Wert der letzten Messung nach Index (1-n). Ist keine vorherige Messung vorhanden, gibt die Funktion 0 zurück. |
getLastErangerStringValue | Ermittelt den String-Wert der letzten Messung nach Index (1-n). Die Funktion gibt einen leeren String zurück, wenn keine vorherige Messung verfügbar ist. |
outputErangerValues | Wenn mit den obigen Funktionen Rückgabewerte, String-Werte oder Info-Meldungsinhalte hinzugefügt werden, muss diese Funktion als letztes Element in das Skript eingefügt werden |
Ausführen von Werten und Alarm Limits
Wert / Alarm Limit | Beschreibung |
---|---|
Ausführungszeit | Die Zeit, die für die Ausführung des Befehls oder Skripts benötigt wurde (es sei denn, sie wurde durch Aktivieren des Parameters " Laufzeit unterdrücken" deaktiviert) |
Exit-Code | Der Exit-Code des Befehls oder des Skripts |
Rückgabewert <0-n> | Ein numerischer Wert mit Ganzzahl- oder Fließkommagenauigkeit. Für alle konfigurierten Rückgabewerte können Alarm Limits definiert werden. |
String-Wert <0-n> | Ein Zeichenfolgenwert. Nur für eine begrenzte Anzahl bekannter statischer Zeichenketten verwenden, nicht für Zeichenketten, die sich sehr oft ändern (die z. B. die Uhrzeit und das Datum enthalten). Für alle konfigurierten Zeichenkettenwerte können Alarm Limits definiert werden. |
Fehlercode | Generischer Job-Fehlercode (siehe Abschnitt Job-Fehlercodes) |
Ausführungsbeispiele
Beispiel 1 - Ausführen eines einzelnen Befehls mit mehreren Kommandozeilenargumenten
Mit den folgenden Parametern wird der sudo-Befehl ausgeführt, um ein Skript zum Neustart des Berichtsdienstes in SKOOR Engine auszuführen:
Es müssen keine Rückgabe- oder String-Werte definiert werden, nur der Exit-Code des kombinierten Befehls wird geprüft.
Ausgabe 1
Sollte der Befehl aus irgendeinem Grund nicht funktionieren, geben Sie einen Dateinamen in das Textfeld Save output to file parameter ein:
Die Standardausgabe und/oder Standardfehler des Befehls werden in diese Datei umgeleitet. Sie kann im Wertebereich des Auftrags eingesehen werden:
Klicken Sie auf die Schaltfläche Datei aktualisieren, der Dateiname wird zu einem Link:
Klicken Sie auf den Link, um die Befehlsausgabe in einem separaten Browser-Tab oder -Fenster anzuzeigen:
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 ]
Beispiel 2 - Ausführen eines Inline-Skripts mit Bash-Include-Funktionen
Inhalt des Textfeldseines Inline-Skripts für eine einfache Berechnung einer Zufallszahl:
. /opt/eranger/collector/eranger_exec_values.sh newValue=$RANDOM lastValue=$(getLastErangerValue 1) diffValue=$(expr $newValue - $lastValue) setErangerValues $newValue $diffValue outputErangerValues
Zwei Rückgabewerte müssen wie im Inline-Skript konfiguriert definiert werden . Im folgenden Beispiel wurden Neuer Wert und Differenz definiert:
Ein Klick auf die Schaltfläche Einheit ermöglicht die Angabe der Wertedetails:
Ausgabe 2
Beispiel 3 - Ausführen eines Inline-Skripts mit Bash-Include-Funktionen und Verwendung der benutzerdefinierten Eigenschaften des Auftrags als Skriptvariablen
Im Folgenden wird ein Skript ausgeführt, das als Variable mit Skriptargumenten aus einer benutzerdefinierten Eigenschaft übergeben wird. Das Skript lädt eine angegebene Datei (Argument 2) von einem FTP-Server (Argument 1) herunter.
Die benutzerdefinierte Eigenschaft für die Befehlszeilenargumente muss zunächst über das Menü Verwaltung definiert werden. Klicken Sie auf die Schaltfläche Admin in der oberen rechten Ecke der Konfigurationsansicht und wählen Sie dann Benutzerdefinierte Eigenschaften aus der Dropdown-Liste Suchen:
Klicken Sie auf die Schaltfläche + am unteren Rand des Bildschirms. Der Abschnitt Neu hinzugefügte Eigenschaften wird angezeigt:
Geben Sie der benutzerdefinierten Eigenschaft einen Namen und legen Sie dann fest, dass diese benutzerdefinierte Eigenschaft nur für Auftragsobjekte verfügbar sein soll:
Klicken Sie auf Anwenden und suchen Sie dann die neu hinzugefügte Eigenschafts-ID, indem Sie mit der Maus über den Namen fahren:
Verlassen Sie das Admin-Menü, indem Sie erneut auf die Schaltfläche Admin in der oberen rechten Ecke klicken. Die benutzerdefinierte Eigenschaft kann nun zu jedem Auftrag hinzugefügt werden.
Fügen Sie sie dem Auftrag Execute hinzu und geben Sie die Kommandozeilenparameter für das Skript ein, auf das im Inline-Skript verwiesen wird:
In diesem Fall sind es 2 Befehlszeilenargumente, die durch ein Leerzeichen getrennt sind.
Fügen Sie nun den Inhalt des Textfeldes Inline-Skript hinzu:
. /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
Fügen Sie dann 1 Rückgabewert hinzu:
Das Skript gibt die FTP-Download-Geschwindigkeit in kB/s zurück, daher muss ein Divisor hinzugefügt werden, um in MBit/s umzurechnen.
Der Hauptvorteil der Verwendung von benutzerdefinierten Eigenschaften für die Eingabe von Argumenten besteht darin, dass man denselben Inline-Skript-Codeblock für viele Aufträge mit Hilfe einer Auftragsvorlage (siehe Abschnitt Vorlagen) wiederverwenden kann und sich nur die benutzerdefinierte Eigenschaft zwischen den verschiedenen Aufträgen unterscheidet.
Ausgabe 3
Beispiel 4 - Ausführen eines Inline-Skripts mit Bash-Include-Funktionen und unter Verwendung eines ssh-Fernaufrufs
Das folgende Inline-Skript führt einen Befehl aus der Ferne über den ssh-Befehl aus. Es wird davon ausgegangen, dass die ssh-Authentifizierung mit passwortlosen öffentlichen Schlüsseln bereits konfiguriert ist, so dass bei der Verbindung mit dem entfernten ssh-Server kein Passwort abgefragt wird.
Der Befehl liest die Anzahl der aus der Ferne laufenden ddclient-Prozesse aus. Es wird die interne Variable $DEVICE_ADDRESS$ verwendet.
. /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
Fügen Sie 1 Rückgabewert hinzu:
Ausgabe 4
Beispiel 5 - Befehl aus der Ferne über ssh ausführen
Das folgende Beispiel verwendet das Kontrollkästchen Execute remotely, um die ssh-Authentifizierungsdaten einzugeben und einen Befehl auf einem entfernten Rechner auszuführen:
Bei der Fernausführung können keine Rückgabewerte oder Zeichenkettenwerte verwendet werden, nur der Exit-Code wird überprüft.
Ausgabe 5
Beispiel 6 - Ausführen einer WMI-Abfrage auf einem Windows 2000 Server und Lesen des Ereignisprotokolls
Verwenden Sie das folgende Inline-Skript:
. /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
Fügen Sie dann 2 Rückgabewerte hinzu:
Ausgabe 6
Beispiel 7 - wget-Download mit automatischem Abbruch nach 45 Sekunden
Verwenden Sie die folgende Notation, um sicherzustellen, dass der externe Befehl (in diesem Fall wget) automatisch abgebrochen wird, wenn er länger als 45 Sekunden läuft:
(sleep 45; kill -9 -$$) & wget -O /dev/null http://www.debian.org/netinst.iso