From 1d517cefcaaecce8505c7fab81432f698397f75c Mon Sep 17 00:00:00 2001 From: Tim Schilling | IuK Date: Tue, 3 Dec 2024 08:12:22 +0100 Subject: [PATCH] Erweitern der Dokumentation --- .gitignore | 1 - README.md | 31 ++++++++++++++++++++++++++++--- backup.sh | 49 +++++++++++++++++++++++++++++++------------------ setup.sh | 11 +++++------ 4 files changed, 64 insertions(+), 28 deletions(-) diff --git a/.gitignore b/.gitignore index c315551..880e305 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ /keys -/temp diff --git a/README.md b/README.md index d400424..493b593 100644 --- a/README.md +++ b/README.md @@ -3,13 +3,38 @@ Dieses Projekt befasst sich mit dem automatischen verschieben der Exportierten Passwortdatein aus Vaultwarden auf ein externes WebDAV laufwerk. -## Requirements +## Voraussetzungen - rclone muss auf Ausführendem Host installiert sein -- ssh KEY authentifizierung bei sftp remote host -- SSH KEY Authentifizierung bei Docker Host +- SSH Schlüsselauthentifizierung zu allen benötigten Hosts (Docker und SFTP) muss gegeben sein. ## Funktion +Dieses Projekt besteht aus zwei Skripten, der '''setup.sh''' und der '''backup.sh''. Die Eigendliche funktion funktioniert jedoch auschließlich die '''backup.sh''' + +Die '''setup.sh''' ist für die Erstellung der für das einbinden der WebDAV Freigabe benötigten vorkonfiguration zuständig. Sie fürt folgende schritte aus: + - Installieren von rclone (Programm für die Verbindung der Freigabe) + - Verschlüsselung des Benötigten Passworts + - Erstellen der rclone Konfigurationsdatei + - Sicherstellen das Berechtigungen richtig gesetzt sind + +Die '''backup.sh''' ist für das Verschiben der Datein benötigt, diese solte auch mit einem cron task automatisch mit einem zeitintervall ausgeführt werden. Die ausgeführten schritte sind wie folgt: + - Erstellen des benötigten Mount Punktes für WebDAV + - Starten des benötigten Docker Containers und warten bis dieser durchgelaufen ist + - Transferieren der Datein von Remotehost auf Lokale maschine + - Einhängen / Verbinden der Webdav Freigabe + - Leeren der WebDAV freigabe von Alten Backups + - Übertragen der neunen Backups von Lokaler Maschine auf WebDAV Freigabe. + - Aushängen der WebDAV Freigabe + ## Dateibaum +''' +├──.git +├── .gitignore +├── README.md +├── backup.sh +├── setup.sh +├── temp +└── webdav +''' \ No newline at end of file diff --git a/backup.sh b/backup.sh index 6edc787..548dd39 100755 --- a/backup.sh +++ b/backup.sh @@ -1,14 +1,16 @@ #!/bin/bash +# --------------------------------------------------------------------------------------------------------------------- +# Festlegen von diversen Variablen # Konfigurationsvariablen -MOUNT_POINT="./webdav/" -DOCKER_HOST="kitl-v-lx-dock.kitl.bayern" -SFTP_HOST1=$DOCKER_HOST +MOUNT_POINT="./webdav/" #Ort wod die Webdav Freigabe eingehängt werden soll +DOCKER_HOST="kitl-v-lx-dock.kitl.bayern" #IP oder Hostname wo der Docker Container Läuft +SFTP_HOST1=$DOCKER_HOST #IP oder Hostname von dem Host von welchem die Datein geladen werden sollen, meist gleich zu Docker Host # Nutzerdaten -DOCKER_USER="kitl" -SFTP_USER1=$DOCKER_USER +DOCKER_USER="kitl" #Name des Nutzers für den Dockerhost +SFTP_USER1=$DOCKER_USER #Name des Nutzers für den SFTPhost, meist gleich zu Docker # Farben für die Ausgabe @@ -16,16 +18,20 @@ GREEN="\033[0;32m" RED="\033[0;31m" NC="\033[0m" # Keine Farbe -# Funktion zur Ausgabe von Meldungen +# ---------------------------------------------------------------------------------------------------------------------- +# Festlegen von Funktionen + +# Funktion zur Ausgabe von log Meldungen function log() { echo -e "${GREEN}[INFO] $1${NC}" } +# Funktion zur Ausgabe von error Meldungen function error() { echo -e "${RED}[ERROR] $1${NC}" } - +# Funktion für das Starten des Speziefischen Docker Containers function dockerremote(){ #Enrichten von Variablen für Funktion REMOTE_HOST=$1 @@ -46,10 +52,9 @@ function dockerremote(){ ssh "$REMOTE_USER@$REMOTE_HOST" "while docker ps --filter name=$CONTAINER_NAME --filter status=running --quiet > /dev/null; do sleep 1; done" log "Der Container ist Gestoppt mache weiter" - REMOTE_HOST="" - REMOTE_USER="" } +# Funktion zum Herunterladen der Datein im angegebenen Verzeichniss function sftptransfer(){ #Einrichten der Variablen für Funktion REMOTE_USER=$1 @@ -57,9 +62,11 @@ function sftptransfer(){ REMOTE_DIR=$3 LOCAL_DIR="./temp" + # Prüfung das Localdir auch Existiert bevor log "Sicherstellen das $LOCAL_DIR existiert" mkdir -p "$LOCAL_DIR" + # Anmelden über SFTP und Herunterladen der Datein log "Lade Datein von $REMOTE_DIR herunter" sftp "$REMOTE_USER"@"$REMOTE_HOST" << EOF cd $REMOTE_DIR @@ -69,10 +76,10 @@ function sftptransfer(){ EOF log "Datein Heruntergeladen" - REMOTE_HOST="" - REMOTE_USER="" } +# --------------------------------------------------------------------------------------------- +# Begin des Eigentlichen Scripts # Sicherstellen, dass das Skript als root ausgeführt wird if [[ $EUID -ne 0 ]]; then @@ -86,6 +93,13 @@ log "Erstelle den Mount-Punkt $MOUNT_POINT..." mkdir -p "$MOUNT_POINT" chmod 755 "$MOUNT_POINT" +# Starten von Docker Container +dockerremote "$DOCKER_USER" "$DOCKER_HOST" "bw-export-iuk" + +# Holen der Datein welche durch Docker Container Erstellt wurden +sftptransfer "$SFTP_USER1" "$SFTP_HOST1" "/sftpuser/export/data/" + + # WebDAV-Freigabe mounten log "Mounten der WebDAV-Freigabe nach $MOUNT_POINT..." rclone mount webdav: "$MOUNT_POINT" --daemon --allow-other --umask 002 || { @@ -95,14 +109,11 @@ rclone mount webdav: "$MOUNT_POINT" --daemon --allow-other --umask 002 || { log "WebDAV-Freigabe erfolgreich gemountet." +# Leeren des Kommsafe Ordners von Alten Backups +rm -rf $MOUNT_POINT -dockerremote "$DOCKER_USER" "$DOCKER_HOST" "bw-export-iuk" - -rm -rf ./webdav/ - -sftptransfer "$SFTP_USER1" "$SFTP_HOST1" "/sftpuser/export/data/" - -mv ./temp/* ./webdav/ +# Übertragen der Aktuellen Backups nach Komsafe +mv ./temp/* $MOUNT_POINT # Webdav Unmounten @@ -112,3 +123,5 @@ if mountpoint -q "$MOUNT_POINT"; then else log "Der Mount-Punkt ist bereits unmountet." fi + +log "Backup der Datein erfolgreich ausgeführt" \ No newline at end of file diff --git a/setup.sh b/setup.sh index 4bcd00c..d7c2d83 100755 --- a/setup.sh +++ b/setup.sh @@ -3,7 +3,6 @@ # Variablen WEBDAV_USER="tim.schilling@koenigsbrunn.de" WEBDAV_PASS="HgdKS-P2004!" - WEBDAV_URL="https://www.kommsafe.de/webdav/Stadt%20K%C3%B6nigsbrunn/IuK/KITL-VaultWarden%20Backups" RCLONE_CONFIG="/root/.config/rclone/rclone.conf" @@ -12,11 +11,12 @@ GREEN="\033[0;32m" RED="\033[0;31m" NC="\033[0m" # Keine Farbe -# Funktion zur Ausgabe von Meldungen +# Funktion zur Ausgabe von log Meldungen (Grün) function log() { echo -e "${GREEN}[INFO] $1${NC}" } +# Funktion zur Ausgabe von error Meldungen (Rot) function error() { echo -e "${RED}[ERROR] $1${NC}" } @@ -37,7 +37,7 @@ else fi -# Verschlüsseltes Passwort generieren +# Verschlüsseltes Passwort generieren, unter nutung des rclone obscure befehls log "Verschlüssele das WebDAV-Passwort..." ENCRYPTED_PASSWORD=$(rclone obscure "$WEBDAV_PASS") if [[ -z "$ENCRYPTED_PASSWORD" ]]; then @@ -56,10 +56,9 @@ vendor = other user = $WEBDAV_USER pass = $ENCRYPTED_PASSWORD EOF + +# Festlegen der Berechtigungen auf nur lesen für Besitzer chmod 600 "$RCLONE_CONFIG" log "rclone-Konfiguration gespeichert unter $RCLONE_CONFIG." - - - log "Vorbereitungen abgeschlossen"