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