# 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` - `jq` Installation sur Debian / Ubuntu : ```bash sudo apt update sudo apt install -y tar openssh-client curl cron jq ```` --- # 3. Emplacement du script Le script est situé dans : ```bash /home//Malio-ops/BackupVaultWarden/ ``` Structure recommandée : ```bash /home//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 DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/... REMOTE_USER= REMOTE_HOST= SSH_KEY=/home//.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 ```text '%s' ```
Fragment 2 ```text xlIHBldGl0IHN0YWdpYWlyZSBtYXR0ZW8gZHVu ```
Le script charge directement le fichier `.env` avec `source` et exporte automatiquement les variables pendant le chargement. Mécanisme utilisé : ```bash 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 : ```bash ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_backup ``` #### 2. Copie de la clé vers le serveur distant ```bash ssh-copy-id -i ~/.ssh/id_ed25519_backup.pub @ ``` Cette commande ajoute la clé dans : ``` ~/.ssh/authorized_keys ``` sur la machine IA. #### 3. Vérification de la connexion ```bash ssh -i ~/.ssh/id_ed25519_backup -o StrictHostKeyChecking=yes @ ``` #### 4. Vérification des fichiers de clé ```bash ls ~/.ssh/id_ed25519_backup* ``` Fichiers attendus : ``` ~/.ssh/id_ed25519_backup ~/.ssh/id_ed25519_backup.pub ``` #### 5. Permissions SSH Machine locale : ```bash chmod 700 ~/.ssh chmod 600 ~/.ssh/id_ed25519_backup chmod 644 ~/.ssh/id_ed25519_backup.pub ``` Machine distante : ```bash 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. ```bash ssh-keyscan -H >> ~/.ssh/known_hosts chmod 600 ~/.ssh/known_hosts ``` #### 7. Déclaration dans `.env` ```bash SSH_KEY=/home//.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` : ```bash tar -czf "$LOCAL_BACKUP_FILE" -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 "${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 : ```bash 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 : ```bash 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 l’erreur --- # 10. Rotation distante des sauvegardes Le script supprime les archives distantes plus anciennes que la durée de retention configurée. Configuration dans `.env` : ```bash # BACKUP_RETENTION_DAYS=10 ``` Commande utilisée : ```bash 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 : ```bash crontab -e ``` Ajouter : ```bash 0 19 * * * /home//Malio-ops/BackupVaultWarden/backup-vaultwarden.sh 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**. --- # 12. Nettoyage Une fois la sauvegarde transférée : ```bash 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 bash /home//Malio-ops/BackupVaultWarden/backup-vaultwarden.sh ``` --- # 14. Vérification des logs Logs : ```bash 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 * 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**.