#!/bin/bash # Proxmox-Server-IPs und Login-Daten PROXMOX_SERVERS=("192.168.178.2" "192.168.178.3") SSH_USER="root" SSH_KEY_PATH="/root/.ssh/id_rsa" # Pfad zu deinem SSH-Schlüssel # Funktion, um alle VMs auf einem Proxmox-Server zu starten start_vms_if_needed() { local server=$1 echo "Verbinde mit Server: $server" # Liste der VMs, die derzeit nicht laufen ssh -i "$SSH_KEY_PATH" "$SSH_USER@$server" "qm list | grep -v 'status running' | awk '{print \$1}'" | while read vmid; do echo "Starte VM mit ID: $vmid" # VM starten ssh -i "$SSH_KEY_PATH" "$SSH_USER@$server" "qm start $vmid" done } # Funktion für das Update, Upgrade und Bereinigung auf einer VM update_vm() { local server=$1 local vmid=$2 local was_running=$3 # Flag, ob die VM ursprünglich lief (1 = ja, 0 = nein) echo "Führe Update und Upgrade für VM ID $vmid auf Server $server aus" # Update und Upgrade auf der VM durchführen ssh -i "$SSH_KEY_PATH" "$SSH_USER@$server" << EOF qm terminal $vmid -- /bin/bash -c " echo 'Update starte auf VM $vmid...' apt-get update && apt-get upgrade -y && apt-get autoremove -y && apt-get clean echo 'Update abgeschlossen auf VM $vmid' " EOF # Wenn die VM ursprünglich nicht lief, nach dem Update wieder herunterfahren if [ "$was_running" -eq 0 ]; then echo "Fahre VM mit ID $vmid nach dem Update herunter." ssh -i "$SSH_KEY_PATH" "$SSH_USER@$server" "qm stop $vmid" fi } # Funktion, um alle VMs auf einem Server zu überprüfen und zu aktualisieren check_and_update_vms() { local server=$1 echo "Überprüfe VMs auf Server: $server" # Alle VMs durchgehen und sicherstellen, dass sie laufen ssh -i "$SSH_KEY_PATH" "$SSH_USER@$server" "qm list | awk '{print \$1}' | tail -n +2" | while read vmid; do # Prüfen, ob VM läuft status=$(ssh -i "$SSH_KEY_PATH" "$SSH_USER@$server" "qm status $vmid") was_running=0 if [[ "$status" == *"running"* ]]; then # VM läuft, keine Notwendigkeit zum Starten was_running=1 else # VM läuft nicht, starte sie start_vms_if_needed "$server" fi # Nach dem Starten das Update/Upgrade durchführen update_vm "$server" "$vmid" "$was_running" done } # Hauptprozess, alle Server abarbeiten for server in "${PROXMOX_SERVERS[@]}"; do check_and_update_vms "$server" done echo "Alle VMs wurden aktualisiert, bereinigt und nach Bedarf heruntergefahren."