#!/bin/bash # ========================================== # Proxmox / PBS SMTP Notification Setup # ========================================== # Autor: Manuel Maier Style 😎 # Ausgabe: SMTP Notification Konfiguration # ========================================== # ---- Farben / Layout ---- BOLD="\033[1m" GREEN="\033[32m" CYAN="\033[36m" YELLOW="\033[33m" RED="\033[31m" RESET="\033[0m" INDENT=" " set -euo pipefail # ---- Root Check ---- if [[ $EUID -ne 0 ]]; then echo -e "${BOLD}${RED}${INDENT}Bitte als Root ausfĂŒhren (sudo)${RESET}" exit 1 fi # ---- Auswahl PVE / PBS ---- echo -e "${CYAN}${BOLD}${INDENT}Welche Proxmox-Installation möchtest du konfigurieren?${RESET}" echo -e "${INDENT}1) Proxmox VE" echo -e "${INDENT}2) Proxmox Backup Server" while true; do read -rp "${INDENT}Bitte auswĂ€hlen (1 oder 2): " choice case "$choice" in 1) TYPE="PVE" NOTIF_CFG="/etc/pve/notifications.cfg" PRIV_NOTIF_CFG="/etc/pve/priv/notifications.cfg" USER_DEFAULT="mailout" break ;; 2) TYPE="PBS" NOTIF_CFG="/etc/proxmox-backup/notifications.cfg" PRIV_NOTIF_CFG="/etc/proxmox-backup/notifications-priv.cfg" USER_DEFAULT="mailout" break ;; *) echo -e "${RED}${INDENT}UngĂŒltige Auswahl! Bitte 1 oder 2 eingeben.${RESET}" ;; esac done # ---- Backup-Funktion ---- backup_file() { local file=$1 if [[ -f "$file" ]]; then local bak="${file}.bak.$(date +%Y%m%d%H%M%S)" cp "$file" "$bak" echo -e "${YELLOW}${INDENT}Backup erstellt: ${CYAN}$bak${RESET}" fi } # ---- Pflichtfeld-Reader ---- read_required() { local prompt="$1" local varname="$2" local default="${3:-}" local input while true; do if [[ -n "$default" ]]; then read -rp "${INDENT}${prompt} [$default]: " input input=${input:-$default} else read -rp "${INDENT}${prompt}: " input fi if [[ -n "$input" ]]; then printf -v "$varname" '%s' "$input" break fi echo -e "${RED}${INDENT}❌ Eingabe darf nicht leer sein!${RESET}" done } # ---- Backups erstellen ---- backup_file "$NOTIF_CFG" backup_file "$PRIV_NOTIF_CFG" echo echo -e "${CYAN}${BOLD}${INDENT}Bitte die SMTP Notification Konfiguration fĂŒr $TYPE eingeben:${RESET}" echo -e "${INDENT}(Alle Felder sind Pflicht – Enter ĂŒbernimmt ggf. den Default)" echo # ---- Eingaben ---- read_required "Author (MH-PVE02 | MAIERHOME H33)" AUTHOR read_required "From-Address (MH-PVE02@vmd55888.de)" FROMADDR read_required "EmpfĂ€nger-Mailadresse" MAILTO "pbs-dashboard@vmd55888.de" read_required "SMTP Server" SERVER "mail.vmd55888.de" read_required "SMTP Port (25/465/587)" PORT "587" read_required "Modus (starttls/ssl/none)" MODE "starttls" read_required "SMTP Benutzername" USERNAME "$USER_DEFAULT" # ---- Passwort (versteckt) ---- while true; do read -rsp "${INDENT}SMTP Passwort: " SMTP_PASS echo [[ -n "$SMTP_PASS" ]] && break echo -e "${RED}${INDENT}❌ Passwort darf nicht leer sein!${RESET}" done # ---- notifications.cfg schreiben ---- cat > "$NOTIF_CFG" << EOF sendmail: mail-to-root comment Send mails to root@pam's email address disable true mailto-user root@pam matcher: default-matcher comment Route all notifications to mail-to-root mode all target mailout smtp: mailout author $AUTHOR from-address $FROMADDR mailto $MAILTO mailto-user root@pam mode $MODE port $PORT server $SERVER username $USERNAME EOF # ---- priv/notifications-priv.cfg schreiben ---- cat > "$PRIV_NOTIF_CFG" << EOF smtp: mailout password $SMTP_PASS EOF echo echo -e "${GREEN}${BOLD}${INDENT}✅ $TYPE Notification Konfiguration neu geschrieben!${RESET}" echo -e "${INDENT}Bitte WebUI prĂŒfen."