scripte/benutzer_anlegen/apply_changes_to_remote_ser...

110 lines
3.8 KiB
Bash

#!/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