36 lines
1.5 KiB
Bash
Executable File
36 lines
1.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# Agentless-Befehls-Diff per SSH (Schluessel, ohne expect).
|
|
# Aufruf durch wazuh-agentlessd: [use_sudo] <user@host> <hostname aus hosts.yml>
|
|
# Fuehrt /var/ossec/etc/sshpull/commands/<hostname>.sh auf dem Host aus;
|
|
# wazuh-agentlessd vergleicht die Ausgabe mit dem letzten Lauf und alarmiert bei Aenderungen.
|
|
|
|
[ "$1" = "test" ] && [ "$2" = "test" ] && exit 0
|
|
|
|
SUDO=""
|
|
if [ "$1" = "use_sudo" ]; then SUDO="sudo -n"; shift; fi
|
|
TARGET="$1"
|
|
CMDS="/var/ossec/etc/sshpull/commands/$2.sh"
|
|
case "$2" in */*|"") echo "ERROR: ungueltiger Hostname '$2'"; exit 1;; esac
|
|
[ -r "$CMDS" ] || { echo "ERROR: $CMDS fehlt"; exit 1; }
|
|
|
|
ERR=$(mktemp)
|
|
OUT=$(mktemp)
|
|
trap 'rm -f "$ERR" "$OUT"' EXIT
|
|
|
|
echo "INFO: Starting."
|
|
# LC_ALL=C: stabile Ausgabe, sonst gibt es Diffs nur wegen Locale-Wechseln
|
|
{ echo "export LC_ALL=C; unset HISTFILE"; cat "$CMDS"; } \
|
|
| ssh -F /var/ossec/etc/sshpull/ssh_config "$TARGET" $SUDO sh -s >"$OUT" 2>"$ERR"
|
|
RC=$?
|
|
# 255 = ssh selbst ist gescheitert; andere Codes kommen vom letzten Befehl
|
|
if [ "$RC" -eq 255 ] || { [ "$RC" -ne 0 ] && [ ! -s "$OUT" ]; }; then
|
|
MSG=$(tr '\n"\\' ' ' < "$ERR" | cut -c1-400)
|
|
echo "LOG: {\"sshpull_status\":{\"host\":\"${TARGET#*@}\",\"check\":\"commands\",\"status\":\"down\",\"message\":\"rc=$RC $MSG\"}}"
|
|
echo "ERROR: ssh zu $TARGET fehlgeschlagen (rc=$RC): $MSG"
|
|
exit 1
|
|
fi
|
|
echo "STORE: now"
|
|
# Zeilen, die wie Steuerzeilen von agentlessd aussehen, entschaerfen
|
|
sed -e 's/^\(ERROR\|INFO\|FWD\|LOG\|STORE\): /\1 : /' "$OUT"
|
|
exit 0
|