Compare commits

..

11 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
Tim Schilling | IuK da471ff907 Added Variables to setup.sh 2024-11-28 13:41:21 +01:00
Tim Schilling | IuK af9bbde33b Changed gitignore, added envtemplate 2024-11-28 13:12:24 +01:00
6 changed files with 80 additions and 45 deletions
+1 -2
View File
@@ -1,3 +1,2 @@
/temp /keys
secrets.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. 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 - rclone muss auf Ausführendem Host installiert sein (Wird auch durch ```setup.sh``` installiert)
- ssh KEY authentifizierung bei sftp remote host - SSH Schlüsselauthentifizierung zu allen benötigten Hosts (Docker und SFTP) **muss** gegeben sein.
- SSH KEY Authentifizierung bei Docker Host
## Funktion ## 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 ## Dateibaum
```
├──.git
├── .gitignore
├── README.md
├── backup.sh
├── setup.sh
├── temp
└── webdav
```
Regular → Executable
+36 -25
View File
@@ -1,20 +1,16 @@
#!/bin/bash #!/bin/bash
# ---------------------------------------------------------------------------------------------------------------------
source ./enviroment/secret.env # Festlegen von diversen Variablen
source ./enviroment/envireoment.env
# Konfigurationsvariablen # Konfigurationsvariablen
WEBDAV_URL="$ENV_WEBDAV_URL" MOUNT_POINT="./webdav/" #Ort wod die Webdav Freigabe eingehängt werden soll
MOUNT_POINT="$ENV_WEBDAV_MOUNT" DOCKER_HOST="kitl-v-lx-dock.kitl.bayern" #IP oder Hostname wo der Docker Container Läuft
RCLONE_CONFIG="$ENV_RCLONE_CONF" SFTP_HOST1=$DOCKER_HOST #IP oder Hostname von dem Host von welchem die Datein geladen werden sollen, meist gleich zu Docker Host
SFTP_HOST1="$ENV_SFTP_HOST1"
DOCKER_HOST="$ENV_DOCKER_HOST"
# Nutzerdaten # Nutzerdaten
WEBDAV_USER="$ENV_WEBDAV_BENUTZER" DOCKER_USER="kitl" #Name des Nutzers für den Dockerhost
WEBDAV_PASS="$ENV_WEBDAV_PASSWORD" SFTP_USER1=$DOCKER_USER #Name des Nutzers für den SFTPhost, meist gleich zu Docker
SFTP_USER1="$ENV_SFTP_USER1"
# Farben für die Ausgabe # Farben für die Ausgabe
@@ -22,16 +18,20 @@ GREEN="\033[0;32m"
RED="\033[0;31m" RED="\033[0;31m"
NC="\033[0m" # Keine Farbe NC="\033[0m" # Keine Farbe
# Funktion zur Ausgabe von Meldungen # ----------------------------------------------------------------------------------------------------------------------
# Festlegen von Funktionen
# Funktion zur Ausgabe von log Meldungen
function log() { function log() {
echo -e "${GREEN}[INFO] $1${NC}" echo -e "${GREEN}[INFO] $1${NC}"
} }
# Funktion zur Ausgabe von error Meldungen
function error() { function error() {
echo -e "${RED}[ERROR] $1${NC}" echo -e "${RED}[ERROR] $1${NC}"
} }
# Funktion für das Starten des Speziefischen Docker Containers
function dockerremote(){ function dockerremote(){
#Enrichten von Variablen für Funktion #Enrichten von Variablen für Funktion
REMOTE_HOST=$1 REMOTE_HOST=$1
@@ -52,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" 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" log "Der Container ist Gestoppt mache weiter"
REMOTE_HOST=""
REMOTE_USER=""
} }
# Funktion zum Herunterladen der Datein im angegebenen Verzeichniss
function sftptransfer(){ function sftptransfer(){
#Einrichten der Variablen für Funktion #Einrichten der Variablen für Funktion
REMOTE_HOST=$1 REMOTE_USER=$1
REMOTE_USER=$2 REMOTE_HOST=$2
REMOTE_DIR=$3 REMOTE_DIR=$3
LOCAL_DIR="./temp" 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" mkdir -p "$LOCAL_DIR"
log "Lade Datein von "$REMOTE_DIR" herunter" # Anmelden über SFTP und Herunterladen der Datein
sftp $REMOTE_USER@$REMOTE_HOST << EOF log "Lade Datein von $REMOTE_DIR herunter"
sftp "$REMOTE_USER"@"$REMOTE_HOST" << EOF
cd $REMOTE_DIR cd $REMOTE_DIR
lcd $LOCAL_DIR lcd $LOCAL_DIR
get -r * get -r *
@@ -77,6 +78,8 @@ EOF
log "Datein Heruntergeladen" log "Datein Heruntergeladen"
} }
# ---------------------------------------------------------------------------------------------
# Begin des Eigentlichen Scripts
# Sicherstellen, dass das Skript als root ausgeführt wird # Sicherstellen, dass das Skript als root ausgeführt wird
if [[ $EUID -ne 0 ]]; then if [[ $EUID -ne 0 ]]; then
@@ -90,6 +93,13 @@ log "Erstelle den Mount-Punkt $MOUNT_POINT..."
mkdir -p "$MOUNT_POINT" mkdir -p "$MOUNT_POINT"
chmod 755 "$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 # WebDAV-Freigabe mounten
log "Mounten der WebDAV-Freigabe nach $MOUNT_POINT..." log "Mounten der WebDAV-Freigabe nach $MOUNT_POINT..."
rclone mount webdav: "$MOUNT_POINT" --daemon --allow-other --umask 002 || { rclone mount webdav: "$MOUNT_POINT" --daemon --allow-other --umask 002 || {
@@ -99,12 +109,11 @@ rclone mount webdav: "$MOUNT_POINT" --daemon --allow-other --umask 002 || {
log "WebDAV-Freigabe erfolgreich gemountet." log "WebDAV-Freigabe erfolgreich gemountet."
dockerremote "$DOCKER_USER" "$DOCKER_HOST" "bw-export-iuk" # Leeren des Kommsafe Ordners von Alten Backups
rm -rf $MOUNT_POINT
sftptransfer "$SFTP_USER1" "$SFTP_HOST1" /exoport/data/
mv ./temp/* ./webdava/
# Übertragen der Aktuellen Backups nach Komsafe
mv ./temp/* $MOUNT_POINT
# Webdav Unmounten # Webdav Unmounten
@@ -114,3 +123,5 @@ if mountpoint -q "$MOUNT_POINT"; then
else else
log "Der Mount-Punkt ist bereits unmountet." log "Der Mount-Punkt ist bereits unmountet."
fi fi
log "Backup der Datein erfolgreich ausgeführt"
-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=""
-2
View File
@@ -1,2 +0,0 @@
WEBDAV_BENUTZER="dein_benutzername"
WEBDAV_PASSWORD="dein_passwort"
Regular → Executable
+11 -2
View File
@@ -1,15 +1,22 @@
#!/bin/bash #!/bin/bash
# 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"
# Farben für die Ausgabe # Farben für die Ausgabe
GREEN="\033[0;32m" GREEN="\033[0;32m"
RED="\033[0;31m" RED="\033[0;31m"
NC="\033[0m" # Keine Farbe NC="\033[0m" # Keine Farbe
# Funktion zur Ausgabe von Meldungen # Funktion zur Ausgabe von log Meldungen (Grün)
function log() { function log() {
echo -e "${GREEN}[INFO] $1${NC}" echo -e "${GREEN}[INFO] $1${NC}"
} }
# Funktion zur Ausgabe von error Meldungen (Rot)
function error() { function error() {
echo -e "${RED}[ERROR] $1${NC}" echo -e "${RED}[ERROR] $1${NC}"
} }
@@ -30,7 +37,7 @@ else
fi fi
# Verschlüsseltes Passwort generieren # Verschlüsseltes Passwort generieren, unter nutung des rclone obscure befehls
log "Verschlüssele das WebDAV-Passwort..." log "Verschlüssele das WebDAV-Passwort..."
ENCRYPTED_PASSWORD=$(rclone obscure "$WEBDAV_PASS") ENCRYPTED_PASSWORD=$(rclone obscure "$WEBDAV_PASS")
if [[ -z "$ENCRYPTED_PASSWORD" ]]; then if [[ -z "$ENCRYPTED_PASSWORD" ]]; then
@@ -49,6 +56,8 @@ vendor = other
user = $WEBDAV_USER user = $WEBDAV_USER
pass = $ENCRYPTED_PASSWORD pass = $ENCRYPTED_PASSWORD
EOF EOF
# Festlegen der Berechtigungen auf nur lesen für Besitzer
chmod 600 "$RCLONE_CONFIG" chmod 600 "$RCLONE_CONFIG"
log "rclone-Konfiguration gespeichert unter $RCLONE_CONFIG." log "rclone-Konfiguration gespeichert unter $RCLONE_CONFIG."