commit eb5a063624871335f147624b58cec4f1a19b6b6d Author: rpwolff Date: Fri Feb 20 12:27:50 2026 +0100 Initial commit: Zabbix Agent 7.4 deployment scripts diff --git a/README.md b/README.md new file mode 100644 index 0000000..4ad43a8 --- /dev/null +++ b/README.md @@ -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 +``` + +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 +``` + +Beispiel: +```bash +bash deploy-zabbix-agent.sh webserver webserver-prod-01 +``` + +`` 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 +``` + +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 `` +- 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. diff --git a/deploy-update-zabbix-agent.sh b/deploy-update-zabbix-agent.sh new file mode 100755 index 0000000..dce1ceb --- /dev/null +++ b/deploy-update-zabbix-agent.sh @@ -0,0 +1,57 @@ +#!/usr/bin/env bash +# ============================================================================= +# Zabbix Agent 2 – Remote-Update via SSH +# +# Aufruf: +# bash deploy-update-zabbix-agent.sh +# +# Beispiel: +# bash deploy-update-zabbix-agent.sh webserver +# +# Der 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 \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." diff --git a/deploy-zabbix-agent.sh b/deploy-zabbix-agent.sh new file mode 100755 index 0000000..9d98498 --- /dev/null +++ b/deploy-zabbix-agent.sh @@ -0,0 +1,61 @@ +#!/usr/bin/env bash +# ============================================================================= +# Zabbix Agent 2 – Remote-Deployment via SSH +# +# Aufruf: +# bash deploy-zabbix-agent.sh +# +# Beispiele: +# bash deploy-zabbix-agent.sh webserver webserver-prod-01 +# bash deploy-zabbix-agent.sh db-server db-server-02 +# +# Der 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 \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." diff --git a/install-zabbix-agent.sh b/install-zabbix-agent.sh new file mode 100755 index 0000000..4f5299b --- /dev/null +++ b/install-zabbix-agent.sh @@ -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 +# +# 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 " + +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)." diff --git a/update-zabbix-agent.sh b/update-zabbix-agent.sh new file mode 100755 index 0000000..aeec5b8 --- /dev/null +++ b/update-zabbix-agent.sh @@ -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 "════════════════════════════════════════════════"