Files
2026-10-07 10:47:30 +02:00

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