#!/bin/bash # Variablen REMOTE_IP="" REMOTE_USER="root" REMOTE_PASSWORD="" REMOTE_SCRIPT="remote_apply_changes.sh" USER_LIST="encrypted_users.list" FILES_GROUP="fileserver" FILES_GROUP_GID=1000 # Funktion: Abhängigkeiten prüfen check_dependencies() { echo "Prüfe, ob alle Abhängigkeiten installiert sind..." local dependencies=('ssh' 'sshpass' 'scp' 'openssl' 'dialog') for dep in "${dependencies[@]}"; do if ! command -v "$dep" &>/dev/null; then echo "Fehler: $dep ist nicht installiert. Bitte installieren." exit 1 fi done echo "Alle Abhängigkeiten sind installiert." } # Funktion: SSH-Verbindung testen test_ssh_connection() { echo "Prüfe Verbindung zu $REMOTE_USER@$REMOTE_IP..." ssh -o BatchMode=yes -o ConnectTimeout=5 "$REMOTE_USER@$REMOTE_IP" "exit" &>/dev/null if [[ $? -eq 0 ]]; then echo "Schlüssel-basierte Verbindung erfolgreich." return 0 else echo "Schlüssel-basierte Verbindung fehlgeschlagen. Versuche Passwort-basierte Verbindung..." sshpass -p "$REMOTE_PASSWORD" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 "$REMOTE_USER@$REMOTE_IP" "exit" &>/dev/null if [[ $? -eq 0 ]]; then echo "Passwort-basierte SSH-Verbindung erfolgreich." return 1 else echo "Fehler: Keine Verbindung möglich. Bitte prüfen Sie die Zugangsdaten." exit 1 fi fi } # Funktion: Benutzer "fileserver" anlegen ensure_fileserver_user() { echo "Prüfe, ob die Gruppe $FILES_GROUP mit GID $FILES_GROUP_GID existiert..." ssh "$REMOTE_USER@$REMOTE_IP" "getent group $FILES_GROUP || groupadd -g $FILES_GROUP_GID $FILES_GROUP" || { echo "Fehler beim Anlegen der Gruppe $FILES_GROUP auf dem entfernten Server." exit 1 } echo "Gruppe $FILES_GROUP mit GID $FILES_GROUP_GID erfolgreich geprüft/angelegt." } # Funktion: SSH-Schlüssel installieren install_ssh_key() { echo "Prüfe SSH-Schlüssel..." if [[ ! -f ~/.ssh/id_rsa ]]; then echo "SSH-Schlüssel nicht gefunden. Erstelle neuen Schlüssel..." ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa fi echo "Installiere öffentlichen Schlüssel auf dem entfernten Server..." sshpass -p "$REMOTE_PASSWORD" ssh-copy-id -i ~/.ssh/id_rsa.pub "$REMOTE_USER@$REMOTE_IP" echo "SSH-Schlüssel erfolgreich installiert." } # Funktion: Dateien übertragen und Skript ausführen execute_remote_script() { echo "Übertrage Skript und Benutzerliste auf den entfernten Server..." scp "$REMOTE_SCRIPT" "$USER_LIST" "$REMOTE_USER@$REMOTE_IP:/tmp" || { echo "Fehler: Dateien konnten nicht übertragen werden." exit 1 } echo "Führe Skript auf dem entfernten Server aus..." ssh "$REMOTE_USER@$REMOTE_IP" "bash /tmp/$REMOTE_SCRIPT" || { echo "Fehler beim Ausführen des Remote-Skripts. Überprüfen Sie die Logs auf dem entfernten Server." exit 1 } echo "Änderungen erfolgreich auf dem entfernten Server angewendet." } # Hauptlogik main() { # Eingabe der Remote-Daten REMOTE_IP=$(dialog --inputbox "Geben Sie die IP des entfernten Servers ein:" 10 50 3>&1 1>&2 2>&3) REMOTE_PASSWORD=$(dialog --passwordbox "Geben Sie das Passwort für $REMOTE_USER@$REMOTE_IP ein:" 10 50 3>&1 1>&2 2>&3) # Überprüfen der Abhängigkeiten check_dependencies # SSH-Verbindung testen und Schlüssel ggf. installieren if test_ssh_connection; then echo "Schlüssel-basierte Verbindung erfolgreich." else echo "Passwort-basierte Verbindung erfolgreich. Installiere SSH-Schlüssel..." install_ssh_key fi # Benutzer fileserver anlegen ensure_fileserver_user # Dateien übertragen und Remote-Skript ausführen execute_remote_script echo "Alle Schritte erfolgreich abgeschlossen!" } main