Files
Malio-ops/BackupVaultWarden
2026-03-19 11:04:57 +01:00
..
2026-03-19 09:57:12 +01:00
2026-03-19 11:04:57 +01:00

README — Mise en place du script de sauvegarde Vaultwarden

Ce script permet dautomatiser la sauvegarde de Vaultwarden afin de conserver une copie du dossier data, de la transférer vers un serveur distant et denvoyer 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 larchive avec un nom daté ;
  • transférer la sauvegarde vers un serveur distant ;
  • envoyer une notification Discord ;
  • automatiser lexé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
  • jq

Installation sur Debian / Ubuntu :

sudo apt update
sudo apt install -y tar openssh-client curl cron jq

3. Emplacement du script

Le script est situé dans :

/home/<USER>/Malio-ops/BackupVaultWarden/

Structure recommandée :

/home/<USER>/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

DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...
REMOTE_USER=<USER>
REMOTE_HOST=<IP_SERVEUR>
SSH_KEY=/home/<USER>/.ssh/id_ed25519_backup
DATA_DIR=/opt/vaultwarden/data
LOCAL_BACKUP=/var/backups/vaultwarden
REMOTE_DIR=/home/backup/backups/vaultwarden
# BACKUP_REMOTE_SSH_PORT=22
# SSH_CONNECT_TIMEOUT=10
# BACKUP_KNOWN_HOSTS_STRICT=yes
# BACKUP_KNOWN_HOSTS_FILE=/root/.ssh/known_hosts
# BACKUP_RETENTION_DAYS=10

Description des variables

Variable Description
DISCORD_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
LOCAL_BACKUP Dossier local où stocker temporairement l'archive
REMOTE_DIR Dossier de stockage des backups sur le serveur distant
BACKUP_REMOTE_SSH_PORT Port SSH du serveur distant, optionnel, défaut 22
SSH_CONNECT_TIMEOUT Timeout SSH en secondes, optionnel, défaut 10
BACKUP_KNOWN_HOSTS_STRICT Validation stricte des hôtes SSH (yes/no)
BACKUP_KNOWN_HOSTS_FILE Fichier known_hosts utilisé par ssh/scp
BACKUP_RETENTION_DAYS Nombre de jours de conservation distante, optionnel, défaut 10

5. Chargement des variables dans le script

EggMaster
Question 2

Quel format minimal faut-il donner a printf pour afficher une chaine brute ?

Indice commande 2
'%s'
Fragment 2
xlIHBldGl0IHN0YWdpYWlyZSBtYXR0ZW8gZHVu

Le script charge directement le fichier .env avec source et exporte automatiquement les variables pendant le chargement.

Mécanisme utilisé :

set -a
source "$ENV_FILE"
set +a

Explication :

  • set -a exporte automatiquement les variables définies ensuite
  • source "$ENV_FILE" lit et exécute le contenu du fichier .env dans le shell courant
  • set +a désactive ensuite l'export automatique

Cela permet :

  • de charger toutes les variables du fichier .env en une seule fois
  • de conserver la configuration en dehors du script
  • de rester aligné avec le comportement réel du script

6. Connexion au serveur de sauvegarde (Machine IA)

Le transfert des sauvegardes utilise une clé SSH afin de permettre une connexion automatique au serveur distant sans mot de passe.

1. Génération de la clé

Sur la machine exécutant les scripts :

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_backup

2. Copie de la clé vers le serveur distant

ssh-copy-id -i ~/.ssh/id_ed25519_backup.pub <USER>@<IP_SERVEUR>

Cette commande ajoute la clé dans :

~/.ssh/authorized_keys

sur la machine IA.

3. Vérification de la connexion

ssh -i ~/.ssh/id_ed25519_backup -o StrictHostKeyChecking=yes <USER>@<IP_SERVEUR>

4. Vérification des fichiers de clé

ls ~/.ssh/id_ed25519_backup*

Fichiers attendus :

~/.ssh/id_ed25519_backup
~/.ssh/id_ed25519_backup.pub

5. Permissions SSH

Machine locale :

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519_backup
chmod 644 ~/.ssh/id_ed25519_backup.pub

Machine distante :

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

6. Provisionnement de known_hosts

Le script est prévu pour fonctionner avec validation stricte des hôtes SSH.

ssh-keyscan -H <IP_SERVEUR> >> ~/.ssh/known_hosts
chmod 600 ~/.ssh/known_hosts

7. Déclaration dans .env

SSH_KEY=/home/<USER>/.ssh/id_ed25519_backup

Cette clé sera utilisée automatiquement par les scripts (scp / ssh) pour transférer les sauvegardes.

7. Sauvegarde des données Vaultwarden

Le script crée une archive compressée du dossier data :

tar -czf "$LOCAL_BACKUP_FILE" -C "$(dirname "$DATA_DIR")" "$(basename "$DATA_DIR")"

Cela permet dobtenir une sauvegarde portable et compressée.


8. Transfert vers le serveur distant

Une fois larchive créée :

scp "${SCP_OPTS[@]}" "$LOCAL_BACKUP_FILE" "$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'etat de la sauvegarde.

Construction du message :

msg="**${ping}Backup Vaultwarden ${icon}**\n"
msg+="Backup: ${BACKUP_NAME}\n"
msg+="Data transfer: ${status_line}\n"
[[ -n "$details" ]] && msg+="Détails: ${details}"

Envoi du message :

payload="$(jq -n --arg content "$msg" '{content: $content}')"
curl -fsS -H "Content-Type: application/json" -d "$payload" "$DISCORD_WEBHOOK_URL"

Le message indique :

  • si la sauvegarde a réussi
  • si elle a échoué
  • le nom du backup
  • les détails de lerreur

10. Rotation distante des sauvegardes

Le script supprime les archives distantes plus anciennes que la durée de retention configurée.

Configuration dans .env :

# BACKUP_RETENTION_DAYS=10

Commande utilisée :

find "$REMOTE_DIR" -type f -name 'vaultwarden-backup-*.tar.gz' -mtime +$RETENTION_DAYS -delete

Si la variable n'est pas définie, le script utilise 10 jours par défaut.


11. Planification avec cron

Le script est exécuté automatiquement tous les jours à 19h.

Ouvrir le crontab :

crontab -e

Ajouter :

0 19 * * * /home/<USER>/Malio-ops/BackupVaultWarden/backup-vaultwarden.sh 2>&1

Signification :

Champ Valeur
minute 0
heure 19
jour du mois *
mois *
jour semaine *

Le script sexécute donc tous les jours à 19h00.


12. Nettoyage

Une fois la sauvegarde transférée :

rm -f "$LOCAL_BACKUP_FILE"

Cela évite de remplir le disque de la machine Vaultwarden.


13. Test manuel

Avant de mettre le script en cron, tester :

bash /home/<USER>/Malio-ops/BackupVaultWarden/backup-vaultwarden.sh

14. Vérification des logs

Logs :

cat /var/log/vaultwarden_backup.log

15. 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
  • lexécution automatique via cron
  • la configuration sécurisée via .env

Ce système permet dobtenir une sauvegarde fiable, centralisée et surveillée de Vaultwarden.