Added Zabbix autoregister scripts

This commit is contained in:
p2913020
2026-05-21 12:53:58 -04:00
parent f5f17a9046
commit edfcbf2809
6 changed files with 1636 additions and 0 deletions

View File

@@ -0,0 +1,157 @@
#!/bin/bash
#
# Zabbix Agent 2 Deployment Script - Linux
# Installs and configures Zabbix Agent 2 with PSK auto-registration
# Target server: zabbix.snarfnet.net
#
# Usage: sudo bash deploy_zabbix_agent_linux.sh [psk_key]
# psk_key - (optional) 128-char hex PSK. If omitted, one is generated.
#
set -euo pipefail
ZABBIX_SERVER="zabbix.snarfnet.net"
PSK_IDENTITY="PSK_autoregister"
PSK_FILE="/etc/zabbix/zabbix_agent2.psk"
AGENT_CONF="/etc/zabbix/zabbix_agent2.conf"
HOST_METADATA="Linux"
# --- Functions ---
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"; }
detect_os() {
if [ -f /etc/os-release ]; then
. /etc/os-release
OS_ID="${ID}"
OS_VERSION="${VERSION_ID%%.*}"
else
log "ERROR: Cannot detect OS. /etc/os-release not found."
exit 1
fi
}
install_agent_rhel() {
local major_ver="$1"
log "Installing Zabbix Agent 2 on RHEL/CentOS ${major_ver}..."
# Install Zabbix repo
rpm -Uvh "https://repo.zabbix.com/zabbix/7.0/rhel/${major_ver}/x86_64/zabbix-release-latest-7.0.el${major_ver}.noarch.rpm" 2>/dev/null || true
dnf clean all
dnf install -y zabbix-agent2 zabbix-agent2-plugin-*
}
install_agent_debian() {
local codename="$1"
log "Installing Zabbix Agent 2 on Debian/Ubuntu (${codename})..."
wget -q "https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest+ubuntu_all.deb" -O /tmp/zabbix-release.deb
dpkg -i /tmp/zabbix-release.deb
apt-get update
apt-get install -y zabbix-agent2 zabbix-agent2-plugin-*
rm -f /tmp/zabbix-release.deb
}
install_agent() {
detect_os
case "${OS_ID}" in
rhel|centos|rocky|alma|fedora)
install_agent_rhel "${OS_VERSION}"
;;
debian|ubuntu)
local codename
codename=$(lsb_release -cs 2>/dev/null || echo "jammy")
install_agent_debian "${codename}"
;;
*)
log "ERROR: Unsupported OS '${OS_ID}'. Install zabbix-agent2 manually, then re-run."
exit 1
;;
esac
}
generate_psk() {
openssl rand -hex 32
}
configure_agent() {
local psk_key="$1"
log "Writing PSK to ${PSK_FILE}..."
echo "${psk_key}" > "${PSK_FILE}"
chmod 640 "${PSK_FILE}"
chown root:zabbix "${PSK_FILE}"
log "Configuring ${AGENT_CONF}..."
cp "${AGENT_CONF}" "${AGENT_CONF}.bak.$(date +%s)"
# Apply configuration
sed -i "s|^Server=.*|Server=${ZABBIX_SERVER}|" "${AGENT_CONF}"
sed -i "s|^ServerActive=.*|ServerActive=${ZABBIX_SERVER}|" "${AGENT_CONF}"
sed -i "s|^Hostname=.*|# Hostname=|" "${AGENT_CONF}"
# Add/update settings that may not exist
grep -q "^HostnameItem=" "${AGENT_CONF}" && \
sed -i "s|^HostnameItem=.*|HostnameItem=system.hostname|" "${AGENT_CONF}" || \
echo "HostnameItem=system.hostname" >> "${AGENT_CONF}"
grep -q "^HostMetadata=" "${AGENT_CONF}" && \
sed -i "s|^HostMetadata=.*|HostMetadata=${HOST_METADATA}|" "${AGENT_CONF}" || \
echo "HostMetadata=${HOST_METADATA}" >> "${AGENT_CONF}"
grep -q "^TLSConnect=" "${AGENT_CONF}" && \
sed -i "s|^TLSConnect=.*|TLSConnect=psk|" "${AGENT_CONF}" || \
echo "TLSConnect=psk" >> "${AGENT_CONF}"
grep -q "^TLSAccept=" "${AGENT_CONF}" && \
sed -i "s|^TLSAccept=.*|TLSAccept=psk|" "${AGENT_CONF}" || \
echo "TLSAccept=psk" >> "${AGENT_CONF}"
grep -q "^TLSPSKIdentity=" "${AGENT_CONF}" && \
sed -i "s|^TLSPSKIdentity=.*|TLSPSKIdentity=${PSK_IDENTITY}|" "${AGENT_CONF}" || \
echo "TLSPSKIdentity=${PSK_IDENTITY}" >> "${AGENT_CONF}"
grep -q "^TLSPSKFile=" "${AGENT_CONF}" && \
sed -i "s|^TLSPSKFile=.*|TLSPSKFile=${PSK_FILE}|" "${AGENT_CONF}" || \
echo "TLSPSKFile=${PSK_FILE}" >> "${AGENT_CONF}"
}
start_agent() {
log "Enabling and starting zabbix-agent2..."
systemctl enable zabbix-agent2
systemctl restart zabbix-agent2
systemctl status zabbix-agent2 --no-pager
}
# --- Main ---
if [ "$(id -u)" -ne 0 ]; then
echo "This script must be run as root." >&2
exit 1
fi
PSK_KEY="${1:-}"
if [ -z "${PSK_KEY}" ]; then
PSK_KEY=$(generate_psk)
log "Generated new PSK key."
fi
# Validate PSK is valid hex and at least 32 chars
if ! echo "${PSK_KEY}" | grep -qE '^[0-9a-fA-F]{32,128}$'; then
log "ERROR: PSK must be a 32-128 character hex string."
exit 1
fi
log "=== Zabbix Agent 2 Deployment ==="
log "Server: ${ZABBIX_SERVER}"
log "PSK Identity: ${PSK_IDENTITY}"
install_agent
configure_agent "${PSK_KEY}"
start_agent
log "=== Deployment Complete ==="
log "PSK Identity: ${PSK_IDENTITY}"
log "PSK Key: ${PSK_KEY}"
log ""
log "IMPORTANT: Use this same PSK identity and key in your Zabbix server"
log "auto-registration encryption settings."