Dateien nach "benutzer_anlegen" hochladen

This commit is contained in:
sebastian.zell 2024-12-30 01:47:55 +00:00
parent 7451d52f59
commit ddaf900d37
5 changed files with 202 additions and 0 deletions

View File

@ -0,0 +1,30 @@
#!/bin/bash
source ./data_utils.sh
# Gruppenliste erstellen (nur aktive Gruppen, außer fileserver)
group_list=$(awk -F: '/^\[groups\]/ {flag=1; next} /^\[users\]/ {flag=0} flag && $3 == "aktiv" && $1 != "fileserver" {print $1}' encrypted_users.list)
if [[ -z "$group_list" ]]; then
dialog --msgbox "Keine Gruppen verfügbar, die gelöscht werden können." 10 40
exit 1
fi
# Konvertieren der Gruppenliste für die Übergabe an dialog
dialog_group_list=""
while read -r group; do
dialog_group_list="$dialog_group_list $group ''"
done <<< "$group_list"
# Gruppe auswählen
group_name=$(dialog --menu "Wählen Sie die Gruppe, die gelöscht werden soll:" 15 50 8 $dialog_group_list 3>&1 1>&2 2>&3)
if [[ -z "$group_name" ]]; then
dialog --msgbox "Abbruch. Keine Gruppe ausgewählt." 10 40
exit 1
fi
# Gruppe als gelöscht markieren
sed -i "/^\[groups\]/,/^\[users\]/s/^$group_name:[^:]*:[^:]*$/$group_name:geloescht/" encrypted_users.list
dialog --msgbox "Die Gruppe '$group_name' wurde markiert und wird beim nächsten Synchronisieren gelöscht." 10 40

View File

@ -0,0 +1,27 @@
#!/bin/bash
source ./data_utils.sh
delete_user() {
initialize_user_list
# Benutzerliste abrufen
users=$(read_users | grep ":aktiv$" | awk -F':' '{print $1 " " $1}')
if [[ -z "$users" ]]; then
dialog --msgbox "Keine aktiven Benutzer verfügbar." 10 30
return
fi
# Benutzer grafisch auswählen
username=$(dialog --menu "Benutzer auswählen, der gelöscht werden soll:" 20 50 10 $users 3>&1 1>&2 2>&3)
if [[ -z "$username" ]]; then
dialog --msgbox "Kein Benutzer ausgewählt." 10 30
return
fi
# Benutzer als gelöscht markieren
sed -i "s|^$username:.*|$username::geloescht|" "$USER_LIST"
dialog --msgbox "Benutzer $username wurde erfolgreich gelöscht." 10 30
}
delete_user

View File

@ -0,0 +1,48 @@
#!/bin/bash
source ./data_utils.sh
deploy_changes_to_remote() {
# Schritt 1: Zielserver-Informationen abfragen
TARGET_SERVER=$(dialog --inputbox "Geben Sie die IP-Adresse des Zielservers ein:" 10 50 3>&1 1>&2 2>&3)
TARGET_USER="root"
TARGET_PASSWORD=$(dialog --insecure --passwordbox "Geben Sie das Passwort für $TARGET_USER@$TARGET_SERVER ein:" 10 50 3>&1 1>&2 2>&3)
if [[ -z "$TARGET_SERVER" || -z "$TARGET_PASSWORD" ]]; then
dialog --msgbox "IP-Adresse oder Passwort fehlt. Vorgang abgebrochen." 10 30
return
fi
# Schritt 2: SSH-Schlüsselpaar prüfen oder erstellen
if [[ ! -f "$HOME/.ssh/id_rsa" ]]; then
dialog --msgbox "SSH-Schlüssel wird erstellt..." 10 30
ssh-keygen -t rsa -b 4096 -N "" -f "$HOME/.ssh/id_rsa"
fi
# Schritt 3: Öffentlichen Schlüssel auf dem Zielserver installieren
dialog --msgbox "Installiere öffentlichen Schlüssel auf $TARGET_SERVER..." 10 30
sshpass -p "$TARGET_PASSWORD" ssh-copy-id -i "$HOME/.ssh/id_rsa.pub" "$TARGET_USER@$TARGET_SERVER"
# Verbindung testen
ssh -o BatchMode=yes "$TARGET_USER@$TARGET_SERVER" "echo 'SSH-Zugang ohne Passwort erfolgreich!'" &>/dev/null
if [[ $? -ne 0 ]]; then
dialog --msgbox "Fehler bei der SSH-Konfiguration. Bitte prüfen." 10 30
return
fi
dialog --msgbox "SSH-Zugang ohne Passwort erfolgreich." 10 30
# Schritt 4: Generiertes Skript erstellen
remote_script="remote_apply_changes.sh"
./generate_remote_script.sh
# Schritt 5: Skript auf Zielserver hochladen
dialog --msgbox "Übertrage Skript auf den Zielserver..." 10 30
scp "$remote_script" "$TARGET_USER@$TARGET_SERVER:/tmp"
# Schritt 6: Skript auf Zielserver ausführen
dialog --msgbox "Führe das Skript auf dem Zielserver aus..." 10 30
ssh "$TARGET_USER@$TARGET_SERVER" "bash /tmp/$remote_script"
dialog --msgbox "Änderungen wurden erfolgreich auf $TARGET_SERVER angewendet." 10 30
}
deploy_changes_to_remote

View File

@ -0,0 +1,8 @@
[users]
sebastian.zell:2000:U2FsdGVkX18tLfq131Ve0QvTqZJi/w9FNTek5K122Xc=:fileserver,familie,buero:aktiv
[groups]
fileserver:aktiv
buero:501:aktiv
familie:502:aktiv
privat:503:aktiv

View File

@ -0,0 +1,89 @@
#!/bin/bash
set -euo pipefail
REMOTE_SCRIPT="remote_apply_changes.sh"
# Skriptvorlage mit Debugging
cat << 'EOF' > "$REMOTE_SCRIPT"
#!/bin/bash
set -euo pipefail
exec > >(tee -a /var/log/remote_apply_changes.log) 2>&1
set -x
# Sicherstellen, dass die erforderlichen Gruppen existieren
create_group_if_not_exists() {
local group_name="\$1"
local group_gid="\$2"
if ! getent group "\$group_name" > /dev/null; then
echo "Erstelle Gruppe: \$group_name mit GID \$group_gid"
groupadd --gid "\$group_gid" "\$group_name"
else
echo "Gruppe \$group_name existiert bereits."
fi
}
# Sicherstellen, dass der Benutzer existiert
create_or_update_user() {
local username="\$1"
local uid="\$2"
local password="\$3"
local primary_group="\$4"
local additional_groups="\$5"
if id "\$username" > /dev/null 2>&1; then
echo "Aktualisiere Benutzer: \$username"
usermod --uid "\$uid" --gid "\$primary_group" --groups "\$additional_groups" "\$username"
else
echo "Erstelle Benutzer: \$username"
useradd --uid "\$uid" --gid "\$primary_group" --groups "\$additional_groups" "\$username"
fi
echo "\$username:\$password" | chpasswd
}
# Gruppenänderungen anwenden
apply_group_changes() {
while read -r group_entry || [[ -n "\$group_entry" ]]; do
group_name=\$(echo "\$group_entry" | cut -d':' -f1)
group_gid=\$(echo "\$group_entry" | cut -d':' -f2)
group_status=\$(echo "\$group_entry" | cut -d':' -f3)
if [[ "\$group_status" == "aktiv" ]]; then
create_group_if_not_exists "\$group_name" "\$group_gid"
elif [[ "\$group_status" == "geloescht" ]]; then
if getent group "\$group_name" > /dev/null; then
echo "Lösche Gruppe: \$group_name"
groupdel "\$group_name"
fi
fi
done < <(grep -E '^[^#]' /etc/encrypted_users.list | awk '/^\[groups\]/ {skip=1; next} skip {print}')
}
# Benutzeränderungen anwenden
apply_user_changes() {
while read -r user_entry || [[ -n "\$user_entry" ]]; do
username=\$(echo "\$user_entry" | cut -d':' -f1)
uid=\$(echo "\$user_entry" | cut -d':' -f2)
password=\$(echo "\$user_entry" | cut -d':' -f3)
groups=\$(echo "\$user_entry" | cut -d':' -f4)
status=\$(echo "\$user_entry" | cut -d':' -f5)
if [[ "\$status" == "aktiv" ]]; then
primary_group="fileserver"
create_or_update_user "\$username" "\$uid" "\$password" "\$primary_group" "\$groups"
elif [[ "\$status" == "geloescht" ]]; then
if id "\$username" > /dev/null 2>&1; then
echo "Lösche Benutzer: \$username"
userdel -r "\$username"
fi
fi
done < <(grep -E '^[^#]' /etc/encrypted_users.list | awk '/^\[users\]/ {skip=1; next} skip {print}')
}
echo "Beginne Änderungen auf dem Server..."
apply_group_changes
apply_user_changes
echo "Änderungen abgeschlossen."
EOF
chmod +x "$REMOTE_SCRIPT"
echo "Remote-Skript $REMOTE_SCRIPT erfolgreich erstellt."