#!/bin/bash ########################################## #   CheckMK Agent Registrierung #   Author: Maximilian Radtke #   E-Mail: maximilian.radtke@gc-gruppe.de ########################################## # Farben für bessere Lesbarkeit RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' CYAN='\033[0;36m' NC='\033[0m' # No Color # Funktion für formatierte Ausgaben print_header() {     echo -e "\n${BLUE}╔════════════════════════════════════════════════════════════╗${NC}"     echo -e "${BLUE}║${NC}  CheckMK Agent - TLS & Updater Registrierung             ${BLUE}║${NC}"     echo -e "${BLUE}╚════════════════════════════════════════════════════════════╝${NC}\n" } print_success() {     echo -e "${GREEN}✓${NC} $1" } print_error() {     echo -e "${RED}✗${NC} $1" } print_info() {     echo -e "${CYAN}ℹ${NC} $1" } print_warning() {     echo -e "${YELLOW}⚠${NC} $1" } # Funktion zur Überprüfung ob Befehle existieren check_dependencies() {     local missing_deps=0         if ! command -v cmk-agent-ctl &> /dev/null; then         print_error "cmk-agent-ctl nicht gefunden"         missing_deps=1     fi         if ! command -v cmk-update-agent &> /dev/null; then         print_error "cmk-update-agent nicht gefunden"         missing_deps=1     fi         if ! command -v curl &> /dev/null; then         print_error "curl nicht gefunden"         missing_deps=1     fi         if ! command -v jq &> /dev/null; then         print_warning "jq nicht gefunden - API-Suche wird übersprungen"     fi         if [ $missing_deps -eq 1 ]; then         print_error "Bitte installieren Sie die fehlenden Abhängigkeiten"         exit 1     fi } # Funktion zur Eingabevalidierung validate_input() {     local var_name=$1     local var_value=$2         if [ -z "$var_value" ]; then         print_error "$var_name darf nicht leer sein"         return 1     fi     return 0 } # Funktion zum Suchen des Hosts in CheckMK via API search_checkmk_host() {     local server=$1     local site=$2     local username=$3     local password=$4     local search_hostname=$5         # Prüfe ob jq verfügbar ist     if ! command -v jq &> /dev/null; then         return 1     fi         print_info "Suche Host in CheckMK..." >&2         # API URL     local api_url="https://${server}/${site}/check_mk/api/1.0/domain-types/host_config/collections/all"         # Bearer Token Format: "username password"     local auth_header="Authorization: Bearer ${username} ${password}"         # API Aufruf     local response=$(curl -s -k -H "$auth_header" -H "Accept: application/json" "$api_url" 2>/dev/null)         if [ $? -ne 0 ]; then         print_warning "Konnte nicht auf CheckMK API zugreifen" >&2         return 1     fi         # Suche nach dem Host (case-insensitive)     local search_lower=$(echo "$search_hostname" | tr '[:upper:]' '[:lower:]')     local found_host=$(echo "$response" | jq -r --arg search "$search_lower" '.value[]? | select(.id | ascii_downcase == $search) | .id' 2>/dev/null | head -n 1)         if [ -n "$found_host" ]; then         print_success "Host gefunden in CheckMK: $found_host" >&2         echo "$found_host"         return 0     else         print_warning "Host '$search_hostname' nicht in CheckMK gefunden" >&2         return 1     fi } # Header anzeigen print_header # Abhängigkeiten prüfen print_info "Prüfe Systemvoraussetzungen..." check_dependencies print_success "Alle benötigten Befehle gefunden" echo "" # Benutzereingaben sammeln echo -e "${BLUE}═══ Schritt 1: Server-Informationen ═══${NC}\n" while true; do     read -p "Server: " SERVER     validate_input "Server" "$SERVER" && break done while true; do     read -p "Site: " SITE     validate_input "Site" "$SITE" && break done echo "" echo -e "${BLUE}═══ Schritt 2: Anmeldedaten ═══${NC}\n" while true; do     read -p "Benutzername: " USERNAME     validate_input "Benutzername" "$USERNAME" && break done while true; do     read -s -p "Passwort: " PASSWORD     echo ""     validate_input "Passwort" "$PASSWORD" && break done echo "" echo -e "${BLUE}═══ Schritt 3: Hostname ═══${NC}\n" # Verwende den FQDN direkt vom System DEFAULT_HOSTNAME=$(hostname | tr '[:upper:]' '[:lower:]') read -p "Hostname [$DEFAULT_HOSTNAME]: " HOSTNAME if [ -z "$HOSTNAME" ]; then     HOSTNAME="$DEFAULT_HOSTNAME" fi # Versuche den Host in CheckMK zu finden echo "" CHECKMK_HOSTNAME=$(search_checkmk_host "$SERVER" "$SITE" "$USERNAME" "$PASSWORD" "$HOSTNAME") if [ -n "$CHECKMK_HOSTNAME" ]; then     # Host in CheckMK gefunden - verwende exakte Schreibweise     HOSTNAME="$CHECKMK_HOSTNAME" else     # Host nicht gefunden - verwende Kleinschreibung als Fallback     HOSTNAME=$(echo "$HOSTNAME" | tr '[:upper:]' '[:lower:]')     print_warning "Verwende Fallback-Hostname: $HOSTNAME"     echo ""     read -p "Trotzdem fortfahren? (j/n): " CONTINUE     if [[ ! "$CONTINUE" =~ ^[jJ]$ ]]; then         print_warning "Abbruch durch Benutzer"         exit 0     fi fi # Zusammenfassung anzeigen echo "" echo -e "${BLUE}═══ Zusammenfassung ═══${NC}\n" echo -e "Server:    ${GREEN}$SERVER${NC}" echo -e "Site:      ${GREEN}$SITE${NC}" echo -e "Username:  ${GREEN}$USERNAME${NC}" echo -e "Hostname:  ${GREEN}$HOSTNAME${NC}" echo "" read -p "Fortfahren? (j/n): " CONFIRM if [[ ! "$CONFIRM" =~ ^[jJ]$ ]]; then     print_warning "Abbruch durch Benutzer"     exit 0 fi # TLS-Registrierung durchführen echo "" echo -e "${BLUE}═══ Schritt 4: TLS-Registrierung ═══${NC}\n" print_info "Registriere Agent mit TLS..." if yes | cmk-agent-ctl register --hostname "$HOSTNAME" --server "$SERVER" --site "$SITE" --user "$USERNAME" --password "$PASSWORD"; then     print_success "TLS-Registrierung erfolgreich abgeschlossen" else     print_error "TLS-Registrierung fehlgeschlagen (Exit-Code: $?)"     echo ""     print_info "Mögliche Ursachen:"     print_info "  - Netzwerkverbindung zum Server prüfen: ping $SERVER"     print_info "  - Firewall-Regeln prüfen (Port 8000): telnet $SERVER 8000"     print_info "  - DNS-Auflösung prüfen: nslookup $SERVER"     exit 1 fi # Updater registrieren echo "" echo -e "${BLUE}═══ Schritt 5: Updater-Registrierung ═══${NC}\n" print_info "Registriere Agent-Updater..." if cmk-update-agent register -s "$SERVER" -i "$SITE" -H "$HOSTNAME" -p https -U "$USERNAME" -S "$PASSWORD"; then     print_success "Updater-Registrierung erfolgreich abgeschlossen" else     print_error "Updater-Registrierung fehlgeschlagen (Exit-Code: $?)"     exit 1 fi # Erfolgsmeldung echo "" echo -e "${GREEN}╔════════════════════════════════════════════════════════════╗${NC}" echo -e "${GREEN}║${NC}  ✓ Registrierung erfolgreich abgeschlossen!               ${GREEN}║${NC}" echo -e "${GREEN}╚════════════════════════════════════════════════════════════╝${NC}" echo "" print_info "Der CheckMK Agent ist nun registriert und einsatzbereit" echo "" exit 0