markdown # README — Mise en place du script de sauvegarde Vaultwarden Ce script permet d’automatiser la sauvegarde de Vaultwarden afin de conserver une copie du dossier `data`, de la transférer vers un serveur distant et d’envoyer une notification Discord en cas de succès ou d’échec. --- # 1. Objectif du script Le script de sauvegarde Vaultwarden permet de : - sauvegarder les données de Vaultwarden ; - compresser l’archive avec un nom daté ; - transférer la sauvegarde vers un serveur distant ; - envoyer une notification Discord ; - automatiser l’exécution via `cron`. Ce mécanisme permet de sécuriser les mots de passe, les utilisateurs et la configuration stockés dans le dossier `data` de Vaultwarden. --- # 2. Pré-requis Avant de mettre en place le script, vérifier que les éléments suivants sont disponibles sur la machine Vaultwarden : - `bash` - `tar` - `scp` - `ssh` - `curl` - `cron` Installation sur Debian / Ubuntu : ```bash sudo apt update sudo apt install -y tar openssh-client curl cron ```` --- # 3. Emplacement du script Le script est situé dans : ```bash /home/matt/vaultwarden/Malio-ops/BackupVaultWarden/ ``` Structure recommandée : ```bash /home/matt/vaultwarden/Malio-ops/BackupVaultWarden/ ├── backup-vaultwarden.sh ├── .env └── README.md ``` --- # 4. Configuration sécurisée avec le fichier .env Les informations sensibles ne doivent pas être stockées directement dans le script. Elles doivent être placées dans un fichier `.env`. ## Exemple de fichier `.env` ```bash WEBHOOK_URL=https://discord.com/api/webhooks/... REMOTE_USER=backup REMOTE_HOST=192.168.1.50 SSH_KEY=/home/matt/.ssh/id_ed25519_vaultwarden_backup DATA_DIR=/opt/vaultwarden/data REMOTE_DIR=/home/backup/backups/vaultwarden ``` ## Description des variables | Variable | Description | | ----------- | ------------------------------------------------------ | | WEBHOOK_URL | Webhook Discord pour les notifications | | REMOTE_USER | Utilisateur du serveur distant | | REMOTE_HOST | Adresse IP ou DNS du serveur de sauvegarde | | SSH_KEY | Chemin vers la clé SSH utilisée pour le transfert | | DATA_DIR | Dossier `data` de Vaultwarden | | REMOTE_DIR | Dossier de stockage des backups sur le serveur distant | --- # 5. Chargement des variables dans le script Le script récupère les variables du fichier `.env`. Exemple : ```bash REMOTE_USER=$(grep -E '^REMOTE_USER=' .env | cut -d '=' -f2-) ``` Explication : * `grep` recherche la variable dans `.env` * `cut` récupère uniquement la valeur après `=` * la variable shell reçoit la valeur correspondante Cela permet : * d'améliorer la sécurité * de modifier la configuration sans toucher au script --- # 6. Connexion au serveur de sauvegarde (Machine IA) Le transfert des sauvegardes vers la machine IA repose sur une **authentification par clé SSH**. Cette méthode permet au script de se connecter automatiquement au serveur distant sans mot de passe. La clé utilisée pour ce script est : ``` ~/.ssh/id_ed25519_bitwarden ```` --- ## 6.1 Vérifier la présence de la clé SSH Sur la machine exécutant le script, vérifier que la clé existe : ```bash ls ~/.ssh/id_ed25519_bitwarden* ```` Les fichiers attendus sont : ``` ~/.ssh/id_ed25519_bitwarden ~/.ssh/id_ed25519_bitwarden.pub ``` * `id_ed25519_bitwarden` → clé privée utilisée par le script * `id_ed25519_bitwarden.pub` → clé publique autorisée sur la machine IA --- ## 6.2 Copier la clé publique sur la machine IA Envoyer la clé publique vers la machine IA : ```bash ssh-copy-id -i ~/.ssh/id_ed25519_bitwarden.pub backup@192.168.0.179 ``` Cette commande ajoute automatiquement la clé dans : ``` ~/.ssh/authorized_keys ``` sur la machine IA. --- ## 6.3 Ajout manuel de la clé (si ssh-copy-id n'est pas disponible) Afficher la clé publique : ```bash cat ~/.ssh/id_ed25519_bitwarden.pub ``` Copier son contenu puis l’ajouter sur la machine IA dans : ``` ~/.ssh/authorized_keys ``` --- ## 6.4 Vérifier les permissions SSH Sur la machine locale : ```bash chmod 700 ~/.ssh chmod 600 ~/.ssh/id_ed25519_bitwarden chmod 644 ~/.ssh/id_ed25519_bitwarden.pub ``` Sur la machine IA : ```bash chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys ``` --- ## 6.5 Tester la connexion Tester la connexion SSH avec la clé : ```bash ssh -i ~/.ssh/id_ed25519_bitwarden backup@192.168.0.179 ``` Si la configuration est correcte : * la connexion se fait **sans mot de passe** * la machine IA accepte la clé SSH * le script pourra envoyer les sauvegardes automatiquement --- ## 6.6 Déclaration dans le fichier `.env` La clé utilisée par le script doit être déclarée dans `.env` : ```bash SSH_KEY=/home/matt/.ssh/id_ed25519_bitwarden ``` Cette clé sera utilisée automatiquement par `scp` lors du transfert des sauvegardes. # 7. Sauvegarde des données Vaultwarden Le script crée une archive compressée du dossier `data` : ```bash tar -czf "$LOCAL_BACKUP" -C "$(dirname "$DATA_DIR")" "$(basename "$DATA_DIR")" ``` Cela permet d’obtenir une sauvegarde portable et compressée. --- # 8. Transfert vers le serveur distant Une fois l’archive créée : ```bash scp "${SSH_OPTS[@]}" "$LOCAL_BACKUP" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/" ``` Le fichier est envoyé vers le serveur de sauvegarde via SCP. --- # 9. Notification Discord Le script envoie une notification Discord pour informer de l’état de la sauvegarde. Construction du message : ```bash local msg="**@here Backup Vaultwarden $color**\n" msg+="Backup: ${BACKUP_NAME}\n" msg+="Data transfer: $dumps_display\n" [[ -n "$details" ]] && msg+="Details: $details" ``` Envoi du message : ```bash curl -fsS -H "Content-Type: application/json" \ -d "{\"content\":\"$msg\"}" \ "$WEBHOOK_URL" ``` Le message indique : * si la sauvegarde a réussi * si elle a échoué * le nom du backup * les détails de l’erreur --- # 10. Planification avec cron Le script est exécuté automatiquement tous les jours à 19h. Ouvrir le crontab : ```bash crontab -e ``` Ajouter : ```bash 0 19 * * * /home/matt/vaultwarden/Malio-ops/BackupVaultWarden/backup-vaultwarden.sh >> /var/log/vaultwarden_backup.log 2>&1 ``` Signification : | Champ | Valeur | | ------------ | ------ | | minute | 0 | | heure | 19 | | jour du mois | * | | mois | * | | jour semaine | * | Le script s’exécute donc **tous les jours à 19h00**. --- # 11. Nettoyage Une fois la sauvegarde transférée : ```bash rm -f "$LOCAL_BACKUP" ``` Cela évite de remplir le disque de la machine Vaultwarden. --- # 12. Test manuel Avant de mettre le script en cron, tester : ```bash bash /home/matt/vaultwarden/Malio-ops/BackupVaultWarden/backup-vaultwarden.sh ``` --- # 13. Vérification des logs Logs : ```bash cat /var/log/vaultwarden_backup.log ``` --- # 14. Résumé Le script automatise : * la sauvegarde du dossier `data` * la compression et la datation du backup * le transfert sécurisé via SSH * la notification Discord * l’exécution automatique via cron * la configuration sécurisée via `.env` Ce système permet d’obtenir **une sauvegarde fiable, centralisée et surveillée de Vaultwarden**. ```