From 2223026a409d4fc73a0facb90819a363619dc36a Mon Sep 17 00:00:00 2001 From: Tim Schilling | IuK Date: Thu, 28 Nov 2024 10:51:49 +0100 Subject: [PATCH] V1 pre testing --- .gitignore | 4 +- README.md | 11 +++ backup.sh | 116 ++++++++++++++++++++++++++++++++ enviroment/enviroment.env | 10 +++ enviroment/secrets-template.env | 2 + setup.sh | 55 +++++++++++++++ 6 files changed, 197 insertions(+), 1 deletion(-) create mode 100644 README.md create mode 100644 enviroment/enviroment.env create mode 100644 enviroment/secrets-template.env create mode 100644 setup.sh diff --git a/.gitignore b/.gitignore index abe251a..1cccfa0 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ -/temp \ No newline at end of file +/temp +secrets.env + diff --git a/README.md b/README.md new file mode 100644 index 0000000..4c687f4 --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +# BitExport +Dieses Projekt befasst sich mit dem automatischen verschieben der Exportierten Passwortdatein aus Vaultwarden auf ein externes WebDAV laufwerk. + + +## Requirements +- rclone muss installiert sein +- ssh key authentifizierung bei sftp remote host. +## Funktion + + +## Dateibaum diff --git a/backup.sh b/backup.sh index e69de29..bb65432 100644 --- a/backup.sh +++ b/backup.sh @@ -0,0 +1,116 @@ +#!/bin/bash + + +source ./enviroment/secret.env +source ./enviroment/envireoment.env + +# Konfigurationsvariablen +WEBDAV_URL="$ENV_WEBDAV_URL" +MOUNT_POINT="$ENV_WEBDAV_MOUNT" +RCLONE_CONFIG="$ENV_RCLONE_CONF" +SFTP_HOST1="$ENV_SFTP_HOST1" +DOCKER_HOST="$ENV_DOCKER_HOST" + +# Nutzerdaten +WEBDAV_USER="$ENV_WEBDAV_BENUTZER" +WEBDAV_PASS="$ENV_WEBDAV_PASSWORD" +SFTP_USER1="$ENV_SFTP_USER1" + + +# Farben für die Ausgabe +GREEN="\033[0;32m" +RED="\033[0;31m" +NC="\033[0m" # Keine Farbe + +# Funktion zur Ausgabe von Meldungen +function log() { + echo -e "${GREEN}[INFO] $1${NC}" +} + +function error() { + echo -e "${RED}[ERROR] $1${NC}" +} + + +function dockerremote(){ + #Enrichten von Variablen für Funktion + REMOTE_HOST=$1 + REMOTE_USER=$2 + CONTAINER_NAME=$3 + + # Prüfen, ob der Container läuft + ssh "$REMOTE_USER@$REMOTE_HOST" "docker ps --filter name=$CONTAINER_NAME --filter status=running --quiet" > /dev/null 2>&1 + if [ $? -ne 0 ]; then + log "Der Container $CONTAINER_NAME ist nicht gestartet. Starte ihn jetzt..." + ssh "$REMOTE_USER@$REMOTE_HOST" "docker start $CONTAINER_NAME" + else + log "Der Container $CONTAINER_NAME läuft bereits." + fi + + # Warten, bis der Container gestoppt wird + log "Warte, bis der Container $CONTAINER_NAME gestoppt ist..." + 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="" +} + +function sftptransfer(){ + #Einrichten der Variablen für Funktion + REMOTE_HOST=$1 + REMOTE_USER=$2 + REMOTE_DIR=$3 + LOCAL_DIR="./temp" + + log "Sicherstellen das "$LOCAL_DIR" existiert" + mkdir -p "$LOCAL_DIR" + + log "Lade Datein von "$REMOTE_DIR" herunter" + sftp $REMOTE_USER@$REMOTE_HOST << EOF + cd $REMOTE_DIR + lcd $LOCAL_DIR + get -r * + bye +EOF + + log "Datein Heruntergeladen" +} + + +# Sicherstellen, dass das Skript als root ausgeführt wird +if [[ $EUID -ne 0 ]]; then + error "Dieses Skript muss als root ausgeführt werden!" + exit 1 +fi + + +# Mount-Punkt erstellen +log "Erstelle den Mount-Punkt $MOUNT_POINT..." +mkdir -p "$MOUNT_POINT" +chmod 755 "$MOUNT_POINT" + +# WebDAV-Freigabe mounten +log "Mounten der WebDAV-Freigabe nach $MOUNT_POINT..." +rclone mount webdav: "$MOUNT_POINT" --daemon --allow-other --umask 002 || { + error "Fehler beim Mounten der WebDAV-Freigabe!" + exit 1 +} +log "WebDAV-Freigabe erfolgreich gemountet." + + +dockerremote "$DOCKER_USER" "$DOCKER_HOST" "bw-export-iuk" + +sftptransfer "$SFTP_USER1" "$SFTP_HOST1" /exoport/data/ + +mv ./temp/* ./webdava/ + + + +# Webdav Unmounten +log "Unmounten der WebDAV-Freigabe..." +if mountpoint -q "$MOUNT_POINT"; then + fusermount -u "$MOUNT_POINT" && log "Unmount erfolgreich." || error "Fehler beim Unmounten!" +else + log "Der Mount-Punkt ist bereits unmountet." +fi diff --git a/enviroment/enviroment.env b/enviroment/enviroment.env new file mode 100644 index 0000000..5ac50c4 --- /dev/null +++ b/enviroment/enviroment.env @@ -0,0 +1,10 @@ +# .env + +ENV_WEBDAV_URL="https://www.kommsafe.de/webdav/Stadt%20K%C3%B6nigsbrunn/IuK/Schilling" +ENV_WEBDAV_MOUNT="./webdav" +ENV_RCLONE_CONF="/root/.config/rclone/rclone.conf" + +ENV_DOCKER_HOST="" + +ENV_SFTP_HOST1="" +ENV_SFTP_HOST2="" \ No newline at end of file diff --git a/enviroment/secrets-template.env b/enviroment/secrets-template.env new file mode 100644 index 0000000..a723d29 --- /dev/null +++ b/enviroment/secrets-template.env @@ -0,0 +1,2 @@ +WEBDAV_BENUTZER="dein_benutzername" +WEBDAV_PASSWORD="dein_passwort" \ No newline at end of file diff --git a/setup.sh b/setup.sh new file mode 100644 index 0000000..5581c88 --- /dev/null +++ b/setup.sh @@ -0,0 +1,55 @@ +#!/bin/bash + +# Farben für die Ausgabe +GREEN="\033[0;32m" +RED="\033[0;31m" +NC="\033[0m" # Keine Farbe + +# Funktion zur Ausgabe von Meldungen +function log() { + echo -e "${GREEN}[INFO] $1${NC}" +} + +function error() { + echo -e "${RED}[ERROR] $1${NC}" +} + +# Sicherstellen, dass das Skript als root ausgeführt wird +if [[ $EUID -ne 0 ]]; then + error "Dieses Skript muss als root ausgeführt werden!" + exit 1 +fi + + +# Installiere rclone, falls nicht vorhanden +if ! command -v rclone &> /dev/null; then + log "rclone wird installiert..." + apt update && apt install -y rclone || { error "Fehler bei der Installation von rclone!"; exit 1; } +else + log "rclone ist bereits installiert." +fi + + +# Verschlüsseltes Passwort generieren +log "Verschlüssele das WebDAV-Passwort..." +ENCRYPTED_PASSWORD=$(rclone obscure "$WEBDAV_PASS") +if [[ -z "$ENCRYPTED_PASSWORD" ]]; then + error "Fehler beim Verschlüsseln des Passworts!" + exit 1 +fi + +# Rclone-Konfigurationsdatei erstellen +log "Erstelle die rclone-Konfigurationsdatei..." +mkdir -p "$(dirname "$RCLONE_CONFIG")" +cat < "$RCLONE_CONFIG" +[webdav] +type = webdav +url = $WEBDAV_URL +vendor = other +user = $WEBDAV_USER +pass = $ENCRYPTED_PASSWORD +EOF +chmod 600 "$RCLONE_CONFIG" +log "rclone-Konfiguration gespeichert unter $RCLONE_CONFIG." + +log "Vorbereitungen abgeschlossen"