Added Zabbix autoregister scripts
This commit is contained in:
157
zabbix-autoregister/deploy_zabbix_agent_linux.sh
Normal file
157
zabbix-autoregister/deploy_zabbix_agent_linux.sh
Normal 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."
|
||||
Reference in New Issue
Block a user