Dateien nach "benutzer_anlegen" hochladen
This commit is contained in:
parent
7451d52f59
commit
ddaf900d37
|
|
@ -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
|
||||
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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."
|
||||
Loading…
Reference in New Issue