Compare commits

...

9 Commits

Author SHA1 Message Date
Tim Schilling | IuK 0bdd3fd50d Removed testfile after testing 2024-12-17 11:15:17 +01:00
Tim Schilling | IuK 30fef5bcf1 Test für Tanss X Git 2024-12-17 11:05:10 +01:00
Tim Schilling | IuK f2c5b9d02b Fixed formating in README 2024-12-03 13:17:09 +01:00
Tim Schilling | IuK 8ebd8f11db Verbesserung der Formatierung 2024-12-03 08:16:51 +01:00
Tim Schilling | IuK 1d517cefca Erweitern der Dokumentation 2024-12-03 08:12:22 +01:00
Tim Schilling | IuK 0f4035341a Fixed Formating 2024-12-02 10:54:31 +01:00
Tim Schilling | IuK b97a69e0e1 Last changes befor the weekend 2024-11-29 13:18:51 +01:00
Tim Schilling 86f52430b7 Modifikationen nach dem Ersten Testlauf 2024-11-28 15:47:44 +00:00
Tim Schilling | IuK 984be63a0a Removed enviroment and added Variables back to script 2024-11-28 14:26:33 +01:00
7 changed files with 77 additions and 65 deletions
-3
View File
@@ -1,5 +1,2 @@
/keys
/temp
secrets.env
enviroment.env
+32 -4
View File
@@ -3,13 +3,41 @@
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
- rclone muss auf Ausführendem Host installiert sein (Wird auch durch ```setup.sh``` installiert)
- 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:
1. Installieren von rclone (Programm für die Verbindung der Freigabe)
2. Verschlüsselung des Benötigten Passworts
3. Erstellen der rclone Konfigurationsdatei
4. 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:
1. Erstellen des benötigten Mount Punktes für WebDAV
2. Starten des benötigten Docker Containers und warten bis dieser durchgelaufen ist
3. Transferieren der Datein von Remotehost auf Lokale maschine
4. Einhängen / Verbinden der Webdav Freigabe
5. Leeren der WebDAV freigabe von Alten Backups
6. Übertragen der neunen Backups von Lokaler Maschine auf WebDAV Freigabe.
7. Aushängen der WebDAV Freigabe
## Dateibaum
```
├──.git
├── .gitignore
├── README.md
├── backup.sh
├── setup.sh
├── temp
└── webdav
```
Regular → Executable
+36 -24
View File
@@ -1,19 +1,16 @@
#!/bin/bash
source ./enviroment/secret.env
source ./enviroment/envireoment.env
# ---------------------------------------------------------------------------------------------------------------------
# Festlegen von diversen Variablen
# Konfigurationsvariablen
MOUNT_POINT="$ENV_WEBDAV_MOUNT"
SFTP_HOST1="$ENV_SFTP_HOST1"
DOCKER_HOST="$ENV_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
SFTP_USER1="$ENV_SFTP_USER1"
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
@@ -21,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
@@ -51,22 +52,23 @@ 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_HOST=$1
REMOTE_USER=$2
REMOTE_USER=$1
REMOTE_HOST=$2
REMOTE_DIR=$3
LOCAL_DIR="./temp"
log "Sicherstellen das "$LOCAL_DIR" existiert"
# Prüfung das Localdir auch Existiert bevor
log "Sicherstellen das $LOCAL_DIR existiert"
mkdir -p "$LOCAL_DIR"
log "Lade Datein von "$REMOTE_DIR" herunter"
sftp $REMOTE_USER@$REMOTE_HOST << EOF
# Anmelden über SFTP und Herunterladen der Datein
log "Lade Datein von $REMOTE_DIR herunter"
sftp "$REMOTE_USER"@"$REMOTE_HOST" << EOF
cd $REMOTE_DIR
lcd $LOCAL_DIR
get -r *
@@ -76,6 +78,8 @@ EOF
log "Datein Heruntergeladen"
}
# ---------------------------------------------------------------------------------------------
# Begin des Eigentlichen Scripts
# Sicherstellen, dass das Skript als root ausgeführt wird
if [[ $EUID -ne 0 ]]; then
@@ -89,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 || {
@@ -98,12 +109,11 @@ rclone mount webdav: "$MOUNT_POINT" --daemon --allow-other --umask 002 || {
log "WebDAV-Freigabe erfolgreich gemountet."
dockerremote "$DOCKER_USER" "$DOCKER_HOST" "bw-export-iuk"
sftptransfer "$SFTP_USER1" "$SFTP_HOST1" /exoport/data/
mv ./temp/* ./webdava/
# Leeren des Kommsafe Ordners von Alten Backups
rm -rf $MOUNT_POINT
# Übertragen der Aktuellen Backups nach Komsafe
mv ./temp/* $MOUNT_POINT
# Webdav Unmounten
@@ -113,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"
-10
View File
@@ -1,10 +0,0 @@
# .env
ENV_WEBDAV_URL="https://www.kommsafe.de/webdav"
ENV_WEBDAV_MOUNT="/mnt/webdav"
ENV_RCLONE_CONF="/root/.config/rclone/rclone.conf"
ENV_DOCKER_HOST=""
ENV_SFTP_HOST1=""
ENV_SFTP_HOST2=""
-10
View File
@@ -1,10 +0,0 @@
# .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=""
-4
View File
@@ -1,4 +0,0 @@
# .env
WEBDAV_BENUTZER="dein_benutzername"
WEBDAV_PASSWORD="dein_passwort"
Regular → Executable
+9 -10
View File
@@ -1,25 +1,22 @@
#!/bin/bash
source ./enviroment/envireoment.env
source ./enviroment/secret.env
# Variablen
WEBDAV_USER="$ENV_WEBDAV_BENUTZER"
WEBDAV_PASS="$ENV_WEBDAV_PASSWORD"
WEBDAV_URL="$ENV_WEBDAV_URL"
RCLONE_CONFIG="$ENV_RCLONE_CONF"
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"
# Farben für die Ausgabe
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}"
}
@@ -40,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
@@ -59,6 +56,8 @@ 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."