V1 pre testing
This commit is contained in:
@@ -1 +1,3 @@
|
||||
/temp
|
||||
secrets.env
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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=""
|
||||
@@ -0,0 +1,2 @@
|
||||
WEBDAV_BENUTZER="dein_benutzername"
|
||||
WEBDAV_PASSWORD="dein_passwort"
|
||||
@@ -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 <<EOF > "$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"
|
||||
Reference in New Issue
Block a user