110 lines
3.8 KiB
Bash
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
|