#!/bin/bash
# Bereitschaft des Agenten: agent.ping ueber 127.0.0.1 muss "1" liefern -- die
# Frage, die der Zabbix-Server stellt, nicht nur "Port offen".
#
# Gemessen auf rt-1.tick1 (Agent 7.0.22): nur Anfragen MIT ZBXD-Kopf werden
# beantwortet (Antwort "ZBXD\1" + Laenge + "1"); ein Klartext-Schluessel wird
# stumm verworfen. 127.0.0.1 muss in Server= stehen (Debian-Vorgabe und
# Puppet setzen es); fehlt es, schliesst der Agent die Verbindung ohne
# Antwort, und diese Pruefung sagt das.
#
# bash wegen /dev/tcp (kein nc noetig). Port aus ListenPort=, sonst 10050.
port=$(sed -n 's/^ListenPort=\([0-9][0-9]*\).*/\1/p' /etc/zabbix/zabbix_agentd.conf 2>/dev/null | tail -1)
exec 3<>"/dev/tcp/127.0.0.1/${port:-10050}" || { echo "Port ${port:-10050} nicht erreichbar"; exit 1; }
# "agent.ping" hat 10 Zeichen: Laenge 10 als 8 Byte little endian.
printf 'ZBXD\001\012\000\000\000\000\000\000\000agent.ping' >&3
r=$(timeout 3 cat <&3 | tail -c 1)
exec 3<&-
[ "$r" = 1 ] && exit 0
echo "agent.ping antwortet '${r}' statt 1 (127.0.0.1 in Server=?)"
exit 1
