Erweitern der Dokumentation

This commit is contained in:
Tim Schilling | IuK
2024-12-03 08:12:22 +01:00
parent 0f4035341a
commit 1d517cefca
4 changed files with 64 additions and 28 deletions
-1
View File
@@ -1,3 +1,2 @@
/keys /keys
/temp
+28 -3
View File
@@ -3,13 +3,38 @@
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
- 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:
- 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 ## Dateibaum
'''
├──.git
├── .gitignore
├── README.md
├── backup.sh
├── setup.sh
├── temp
└── webdav
'''
+31 -18
View File
@@ -1,14 +1,16 @@
#!/bin/bash #!/bin/bash
# ---------------------------------------------------------------------------------------------------------------------
# Festlegen von diversen Variablen
# Konfigurationsvariablen # Konfigurationsvariablen
MOUNT_POINT="./webdav/" MOUNT_POINT="./webdav/" #Ort wod die Webdav Freigabe eingehängt werden soll
DOCKER_HOST="kitl-v-lx-dock.kitl.bayern" DOCKER_HOST="kitl-v-lx-dock.kitl.bayern" #IP oder Hostname wo der Docker Container Läuft
SFTP_HOST1=$DOCKER_HOST SFTP_HOST1=$DOCKER_HOST #IP oder Hostname von dem Host von welchem die Datein geladen werden sollen, meist gleich zu Docker Host
# Nutzerdaten # Nutzerdaten
DOCKER_USER="kitl" DOCKER_USER="kitl" #Name des Nutzers für den Dockerhost
SFTP_USER1=$DOCKER_USER SFTP_USER1=$DOCKER_USER #Name des Nutzers für den SFTPhost, meist gleich zu Docker
# Farben für die Ausgabe # Farben für die Ausgabe
@@ -16,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
@@ -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" 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_USER=$1 REMOTE_USER=$1
@@ -57,9 +62,11 @@ function sftptransfer(){
REMOTE_DIR=$3 REMOTE_DIR=$3
LOCAL_DIR="./temp" LOCAL_DIR="./temp"
# Prüfung das Localdir auch Existiert bevor
log "Sicherstellen das $LOCAL_DIR existiert" log "Sicherstellen das $LOCAL_DIR existiert"
mkdir -p "$LOCAL_DIR" mkdir -p "$LOCAL_DIR"
# Anmelden über SFTP und Herunterladen der Datein
log "Lade Datein von $REMOTE_DIR herunter" log "Lade Datein von $REMOTE_DIR herunter"
sftp "$REMOTE_USER"@"$REMOTE_HOST" << EOF sftp "$REMOTE_USER"@"$REMOTE_HOST" << EOF
cd $REMOTE_DIR cd $REMOTE_DIR
@@ -69,10 +76,10 @@ function sftptransfer(){
EOF EOF
log "Datein Heruntergeladen" log "Datein Heruntergeladen"
REMOTE_HOST=""
REMOTE_USER=""
} }
# ---------------------------------------------------------------------------------------------
# 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
@@ -86,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 || {
@@ -95,14 +109,11 @@ rclone mount webdav: "$MOUNT_POINT" --daemon --allow-other --umask 002 || {
log "WebDAV-Freigabe erfolgreich gemountet." log "WebDAV-Freigabe erfolgreich gemountet."
# Leeren des Kommsafe Ordners von Alten Backups
rm -rf $MOUNT_POINT
dockerremote "$DOCKER_USER" "$DOCKER_HOST" "bw-export-iuk" # Übertragen der Aktuellen Backups nach Komsafe
mv ./temp/* $MOUNT_POINT
rm -rf ./webdav/
sftptransfer "$SFTP_USER1" "$SFTP_HOST1" "/sftpuser/export/data/"
mv ./temp/* ./webdav/
# Webdav Unmounten # Webdav Unmounten
@@ -112,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"
+5 -6
View File
@@ -3,7 +3,6 @@
# Variablen # Variablen
WEBDAV_USER="tim.schilling@koenigsbrunn.de" WEBDAV_USER="tim.schilling@koenigsbrunn.de"
WEBDAV_PASS="HgdKS-P2004!" WEBDAV_PASS="HgdKS-P2004!"
WEBDAV_URL="https://www.kommsafe.de/webdav/Stadt%20K%C3%B6nigsbrunn/IuK/KITL-VaultWarden%20Backups" WEBDAV_URL="https://www.kommsafe.de/webdav/Stadt%20K%C3%B6nigsbrunn/IuK/KITL-VaultWarden%20Backups"
RCLONE_CONFIG="/root/.config/rclone/rclone.conf" RCLONE_CONFIG="/root/.config/rclone/rclone.conf"
@@ -12,11 +11,12 @@ 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}"
} }
@@ -37,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
@@ -56,10 +56,9 @@ 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."
log "Vorbereitungen abgeschlossen" log "Vorbereitungen abgeschlossen"