Initial commit: Zabbix Agent 7.4 deployment scripts

This commit is contained in:
2026-02-20 12:27:50 +01:00
commit eb5a063624
5 changed files with 408 additions and 0 deletions

105
README.md Normal file
View File

@ -0,0 +1,105 @@
# Zabbix Agent Deployment
Bash-Skripte zur automatischen Installation und Aktualisierung des Zabbix Agent 2 (Version 7.4) auf Debian/Ubuntu-Systemen lokal oder per SSH-Remote-Deployment.
---
## Voraussetzungen
- Zielhost: Debian 11/12 oder Ubuntu 20.04 / 22.04 / 24.04
- SSH Key-Authentifizierung eingerichtet (`~/.ssh/config`)
- Zielhost muss als `root` erreichbar sein
- `wget` auf dem Zielhost vorhanden
---
## Konfiguration
In `install-zabbix-agent.sh` die Zabbix-Server-Adresse eintragen:
```bash
ZABBIX_SERVER="zabbix.example.com" # Zeile 16
```
---
## Skripte
### `install-zabbix-agent.sh`
Installiert Zabbix Agent 2 auf dem lokalen System.
```bash
sudo bash install-zabbix-agent.sh <zabbix-hostname>
```
Was es tut:
- Erkennt automatisch Debian oder Ubuntu (inkl. Version)
- Richtet das Zabbix 7.4 Repository ein
- Installiert `zabbix-agent2`
- Setzt `Hostname` und `ServerActive` in der Konfiguration
- Aktiviert und startet den Dienst
---
### `deploy-zabbix-agent.sh`
Installiert Zabbix Agent 2 auf einem entfernten Host per SSH.
```bash
bash deploy-zabbix-agent.sh <ssh-config-name> <zabbix-hostname>
```
Beispiel:
```bash
bash deploy-zabbix-agent.sh webserver webserver-prod-01
```
`<ssh-config-name>` ist der Host-Eintrag aus `~/.ssh/config`. User, Port und Key werden automatisch von dort übernommen.
---
### `update-zabbix-agent.sh`
Aktualisiert einen vorhandenen Zabbix Agent 2 auf Version 7.4 auf dem lokalen System.
```bash
sudo bash update-zabbix-agent.sh
```
Was es tut:
- Prüft ob `zabbix-agent2` installiert ist
- Richtet das Zabbix 7.4 Repository ein
- Führt das Upgrade durch **bestehende Konfiguration bleibt erhalten**
- Interaktive Rückfragen von `dpkg`/`apt` werden automatisch unterdrückt
- Startet den Dienst neu
---
### `deploy-update-zabbix-agent.sh`
Aktualisiert Zabbix Agent 2 auf einem entfernten Host per SSH.
```bash
bash deploy-update-zabbix-agent.sh <ssh-config-name>
```
Beispiel:
```bash
bash deploy-update-zabbix-agent.sh webserver
```
---
## Ablauf nach der Installation
Den Host im Zabbix-Frontend anlegen, falls noch nicht vorhanden:
**Configuration → Hosts → Create host**
- Host name: identisch mit dem beim Skriptaufruf angegebenen `<zabbix-hostname>`
- Interface: Agent (aktiv) keine IP-Adresse notwendig bei reinem Aktiv-Modus
- Template: z.B. `Linux by Zabbix agent active`
---
## Hinweise
- TrueNAS SCALE: Package-Management ist gesperrt, Agent-Installation nicht möglich. Überwachung via **SNMP** empfohlen (Services → SNMP im TrueNAS Web-Interface).
- Der SSH Post-Quantum-Hinweis (`WARNING: connection is not using a post-quantum key exchange algorithm`) ist eine reine Warnung des OpenSSH-Clients und hat keinen Einfluss auf die Funktion.

57
deploy-update-zabbix-agent.sh Executable file
View File

@ -0,0 +1,57 @@
#!/usr/bin/env bash
# =============================================================================
# Zabbix Agent 2 Remote-Update via SSH
#
# Aufruf:
# bash deploy-update-zabbix-agent.sh <ssh-config-name>
#
# Beispiel:
# bash deploy-update-zabbix-agent.sh webserver
#
# Der <ssh-config-name> entspricht dem Host-Eintrag in ~/.ssh/config.
# =============================================================================
set -euo pipefail
# Farben
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
info() { echo -e "${GREEN}[INFO]${NC} $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
error() { echo -e "${RED}[ERROR]${NC} $*" >&2; exit 1; }
# ── Parameter ─────────────────────────────────────────────────────────────────
[[ $# -lt 1 ]] && error "Aufruf: $0 <ssh-config-name>\nBeispiel: $0 webserver"
SSH_HOST="$1"
REMOTE_TMP="/tmp/update-zabbix-agent.sh"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
UPDATE_SCRIPT="${SCRIPT_DIR}/update-zabbix-agent.sh"
# ── Prüfungen ─────────────────────────────────────────────────────────────────
[[ ! -f "$UPDATE_SCRIPT" ]] && error "Update-Skript nicht gefunden: ${UPDATE_SCRIPT}"
# SSH-Verbindung testen
info "Teste SSH-Verbindung zu '${SSH_HOST}' (via ~/.ssh/config) ..."
ssh -o ConnectTimeout=10 \
-o BatchMode=yes \
-o StrictHostKeyChecking=accept-new \
"${SSH_HOST}" "echo ok" > /dev/null \
|| error "SSH-Verbindung fehlgeschlagen. Ist '${SSH_HOST}' in ~/.ssh/config definiert?"
# ── Skript übertragen ─────────────────────────────────────────────────────────
info "Übertrage Update-Skript auf '${SSH_HOST}' ..."
scp -q \
-o StrictHostKeyChecking=accept-new \
"$UPDATE_SCRIPT" \
"${SSH_HOST}:${REMOTE_TMP}"
# ── Remote-Update ─────────────────────────────────────────────────────────────
info "Starte Update auf '${SSH_HOST}' ..."
echo "──────────────────────────────────────────────────"
ssh -o StrictHostKeyChecking=accept-new \
"${SSH_HOST}" \
"bash ${REMOTE_TMP}; rm -f ${REMOTE_TMP}"
echo "──────────────────────────────────────────────────"
info "Update auf '${SSH_HOST}' abgeschlossen."

61
deploy-zabbix-agent.sh Executable file
View File

@ -0,0 +1,61 @@
#!/usr/bin/env bash
# =============================================================================
# Zabbix Agent 2 Remote-Deployment via SSH
#
# Aufruf:
# bash deploy-zabbix-agent.sh <ssh-config-name> <zabbix-hostname>
#
# Beispiele:
# bash deploy-zabbix-agent.sh webserver webserver-prod-01
# bash deploy-zabbix-agent.sh db-server db-server-02
#
# Der <ssh-config-name> entspricht dem Host-Eintrag in ~/.ssh/config.
# User, Port und Key werden von dort automatisch übernommen.
# =============================================================================
set -euo pipefail
# Farben
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
info() { echo -e "${GREEN}[INFO]${NC} $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
error() { echo -e "${RED}[ERROR]${NC} $*" >&2; exit 1; }
# ── Parameter ─────────────────────────────────────────────────────────────────
[[ $# -lt 2 ]] && error "Aufruf: $0 <ssh-config-name> <zabbix-hostname>\nBeispiel: $0 webserver webserver-prod-01"
SSH_HOST="$1"
ZABBIX_HOSTNAME="$2"
REMOTE_TMP="/tmp/install-zabbix-agent.sh"
# Pfad zum Install-Skript (liegt im selben Verzeichnis wie dieses Skript)
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
INSTALL_SCRIPT="${SCRIPT_DIR}/install-zabbix-agent.sh"
# ── Prüfungen ─────────────────────────────────────────────────────────────────
[[ ! -f "$INSTALL_SCRIPT" ]] && error "Install-Skript nicht gefunden: ${INSTALL_SCRIPT}"
# SSH-Verbindung testen
info "Teste SSH-Verbindung zu '${SSH_HOST}' (via ~/.ssh/config) ..."
ssh -o ConnectTimeout=10 \
-o BatchMode=yes \
-o StrictHostKeyChecking=accept-new \
"${SSH_HOST}" "echo ok" > /dev/null \
|| error "SSH-Verbindung fehlgeschlagen. Ist '${SSH_HOST}' in ~/.ssh/config definiert und erreichbar?"
# ── Skript übertragen ─────────────────────────────────────────────────────────
info "Übertrage Install-Skript auf '${SSH_HOST}' ..."
scp -q \
-o StrictHostKeyChecking=accept-new \
"$INSTALL_SCRIPT" \
"${SSH_HOST}:${REMOTE_TMP}"
# ── Remote-Installation ───────────────────────────────────────────────────────
info "Starte Installation auf '${SSH_HOST}' (Zabbix-Hostname: ${ZABBIX_HOSTNAME}) ..."
echo "──────────────────────────────────────────────────"
ssh -o StrictHostKeyChecking=accept-new \
"${SSH_HOST}" \
"bash ${REMOTE_TMP} ${ZABBIX_HOSTNAME}; rm -f ${REMOTE_TMP}"
echo "──────────────────────────────────────────────────"
info "Deployment auf '${SSH_HOST}' abgeschlossen."

99
install-zabbix-agent.sh Executable file
View File

@ -0,0 +1,99 @@
#!/usr/bin/env bash
# =============================================================================
# Zabbix Agent 2 Aktiv-Modus Installer (Version 7.4)
# Unterstützte Systeme: Debian 11/12, Ubuntu 20.04 / 22.04 / 24.04
#
# Aufruf:
# sudo bash install-zabbix-agent.sh <hostname>
#
# Beispiel:
# sudo bash install-zabbix-agent.sh webserver-prod-01
# =============================================================================
set -euo pipefail
# ── Konfiguration ────────────────────────────────────────────────────────────
ZABBIX_SERVER="zabbix.server-nb.de" # <-- Zabbix-Server-Adresse hier eintragen
ZABBIX_VERSION="7.4"
# ─────────────────────────────────────────────────────────────────────────────
# Farben
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
info() { echo -e "${GREEN}[INFO]${NC} $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
error() { echo -e "${RED}[ERROR]${NC} $*" >&2; exit 1; }
# ── Prüfungen ────────────────────────────────────────────────────────────────
[[ $EUID -ne 0 ]] && error "Bitte als root oder mit sudo ausführen."
[[ $# -lt 1 ]] && error "Kein Hostname angegeben.\nAufruf: $0 <hostname>"
AGENT_HOSTNAME="$1"
# ── OS-Erkennung ─────────────────────────────────────────────────────────────
if [[ ! -f /etc/os-release ]]; then
error "Kein /etc/os-release gefunden kann OS nicht erkennen."
fi
source /etc/os-release
case "$ID" in
debian) REPO_OS="debian"; REPO_CODENAME="${VERSION_CODENAME}" ;;
ubuntu) REPO_OS="ubuntu"; REPO_CODENAME="${VERSION_CODENAME}" ;;
*) error "Nicht unterstütztes Betriebssystem: $ID" ;;
esac
info "System erkannt: ${PRETTY_NAME} (${REPO_CODENAME})"
# ── Zabbix-Repo einrichten ───────────────────────────────────────────────────
RELEASE_PKG="zabbix-release_latest_${ZABBIX_VERSION}+${REPO_OS}${VERSION_ID}_all.deb"
REPO_URL="https://repo.zabbix.com/zabbix/${ZABBIX_VERSION}/release/${REPO_OS}/pool/main/z/zabbix-release/${RELEASE_PKG}"
#"Lade Zabbix-Repository-Paket herunter ..."
wget -q --show-progress -O "/tmp/${RELEASE_PKG}" "${REPO_URL}" \
|| error "Download fehlgeschlagen: ${REPO_URL}"
info "Installiere Repository-Paket ..."
dpkg -i "/tmp/${RELEASE_PKG}"
rm -f "/tmp/${RELEASE_PKG}"
apt-get update -qq
# ── Zabbix Agent 2 installieren ──────────────────────────────────────────────
info "Installiere zabbix-agent2 ..."
apt-get install -y -qq zabbix-agent2
# ── Konfiguration schreiben ───────────────────────────────────────────────────
CONF="/etc/zabbix/zabbix_agent2.conf"
info "Konfiguriere Zabbix Agent 2 (aktiv, Hostname: ${AGENT_HOSTNAME}) ..."
# Hostname setzen
sed -i "s|^Hostname=.*|Hostname=${AGENT_HOSTNAME}|" "$CONF"
# Aktiven Server setzen
sed -i "s|^ServerActive=.*|ServerActive=${ZABBIX_SERVER}|" "$CONF"
# Passiver Server (bleibt für lokale Health-Checks; externe Verbindungen
# werden durch die Firewall geblockt ggf. anpassen)
sed -i "s|^Server=.*|Server=${ZABBIX_SERVER}|" "$CONF"
# HostnameItem deaktivieren, damit der manuell gesetzte Hostname gilt
sed -i "s|^# HostnameItem=.*|# HostnameItem=|" "$CONF" 2>/dev/null || true
# ── Dienst aktivieren und starten ────────────────────────────────────────────
info "Aktiviere und starte Dienst ..."
systemctl enable zabbix-agent2
systemctl restart zabbix-agent2
# ── Ergebnis ─────────────────────────────────────────────────────────────────
echo ""
info "════════════════════════════════════════════════"
info " Zabbix Agent 2 erfolgreich installiert!"
info " Hostname : ${AGENT_HOSTNAME}"
info " Server : ${ZABBIX_SERVER}"
info " Modus : Aktiv"
info " Config : ${CONF}"
info " Status : $(systemctl is-active zabbix-agent2)"
info "════════════════════════════════════════════════"
echo ""
warn "Denk daran: Den Host '${AGENT_HOSTNAME}' im Zabbix-Frontend anlegen,"
warn "falls er noch nicht existiert (Configuration → Hosts → Create host)."

86
update-zabbix-agent.sh Executable file
View File

@ -0,0 +1,86 @@
#!/usr/bin/env bash
# =============================================================================
# Zabbix Agent 2 Update auf Version 7.4
# Unterstützte Systeme: Debian 11/12, Ubuntu 20.04 / 22.04 / 24.04
#
# Aufruf:
# sudo bash update-zabbix-agent.sh
#
# Bestehende Konfiguration (/etc/zabbix/zabbix_agent2.conf) bleibt erhalten.
# =============================================================================
set -euo pipefail
ZABBIX_VERSION="7.4"
# Farben
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
info() { echo -e "${GREEN}[INFO]${NC} $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
error() { echo -e "${RED}[ERROR]${NC} $*" >&2; exit 1; }
# ── Prüfungen ─────────────────────────────────────────────────────────────────
[[ $EUID -ne 0 ]] && error "Bitte als root oder mit sudo ausführen."
# ── OS-Erkennung ──────────────────────────────────────────────────────────────
[[ ! -f /etc/os-release ]] && error "Kein /etc/os-release gefunden."
source /etc/os-release
case "$ID" in
debian) REPO_OS="debian" ;;
ubuntu) REPO_OS="ubuntu" ;;
*) error "Nicht unterstütztes Betriebssystem: $ID" ;;
esac
info "System erkannt: ${PRETTY_NAME}"
# ── Aktuelle Version ermitteln ────────────────────────────────────────────────
CURRENT_VERSION=$(dpkg -l zabbix-agent2 2>/dev/null | awk '/^ii/{print $3}' | head -1 || true)
if [[ -z "$CURRENT_VERSION" ]]; then
error "zabbix-agent2 ist nicht installiert. Bitte zuerst install-zabbix-agent.sh ausführen."
fi
info "Installierte Version: ${CURRENT_VERSION}"
# ── Zabbix 7.4 Repository einrichten ─────────────────────────────────────────
RELEASE_PKG="zabbix-release_latest_${ZABBIX_VERSION}+${REPO_OS}${VERSION_ID}_all.deb"
REPO_URL="https://repo.zabbix.com/zabbix/${ZABBIX_VERSION}/release/${REPO_OS}/pool/main/z/zabbix-release/${RELEASE_PKG}"
info "Lade Zabbix ${ZABBIX_VERSION} Repository-Paket herunter ..."
wget -q --show-progress -O "/tmp/${RELEASE_PKG}" "${REPO_URL}" \
|| error "Download fehlgeschlagen: ${REPO_URL}"
info "Installiere Repository-Paket ..."
# --force-confold: bestehende Repo-Konfiguration behalten, keine Rückfrage
# Hinweis: dpkg kennt kein -o, die Option wird direkt übergeben
DEBIAN_FRONTEND=noninteractive dpkg --force-confold -i "/tmp/${RELEASE_PKG}"
rm -f "/tmp/${RELEASE_PKG}"
apt-get update -qq
# ── Update durchführen ────────────────────────────────────────────────────────
info "Aktualisiere zabbix-agent2 auf Version ${ZABBIX_VERSION} ..."
info "(Bestehende Konfigurationsdatei wird beibehalten)"
# --force-confold: bei Konflikten immer die vorhandene Config behalten, keine Rückfrage
DEBIAN_FRONTEND=noninteractive apt-get install \
--only-upgrade \
-y \
-o Dpkg::Options::="--force-confold" \
-o Dpkg::Options::="--force-confdef" \
zabbix-agent2
# ── Dienst neu starten ────────────────────────────────────────────────────────
info "Starte zabbix-agent2 neu ..."
systemctl restart zabbix-agent2
# ── Ergebnis ──────────────────────────────────────────────────────────────────
NEW_VERSION=$(dpkg -l zabbix-agent2 2>/dev/null | awk '/^ii/{print $3}' | head -1 || true)
echo ""
info "════════════════════════════════════════════════"
info " Zabbix Agent 2 erfolgreich aktualisiert!"
info " Vorher : ${CURRENT_VERSION}"
info " Nachher: ${NEW_VERSION}"
info " Config : /etc/zabbix/zabbix_agent2.conf (unverändert)"
info " Status : $(systemctl is-active zabbix-agent2)"
info "════════════════════════════════════════════════"