====== Proxmox Backup Server ====== ===== Installation ===== Installation sur le même serveur physique que Proxmox. Bien que pas recommandé. Dépôts https://pbs.proxmox.com/docs/installation.html#sysadmin-package-repositories vi /etc/apt/sources.list.d/pbs.sources Types: deb URIs: http://download.proxmox.com/debian/pbs Suites: trixie Components: pbs-no-subscription Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg apt update apt install proxmox-backup-server Une nouvelle source apt sera créé **pbs-enterprise.sources** Ajoutez à la fin de ce fichier Enabled: false ===== Ajouter un server proxmox ===== Menu : * Configuration / Remotes * bouton Add * Auth ID : root@pam (par exemple) * FingerPrint * Aller sur le server proxmox * Menu System / Certificates * Sélectionnez **pveproxy-ssl.pem** * Bouton **View certificate** et copier le **fingerprint** ===== proxmox-backup-client ===== * Un beau tuto bien complet -> https://youtu.be/ddZ-f_nuQ8k?si=AZ7eK69jOfGeD1aJ * Doc officiel -> https://pbs.proxmox.com/docs/backup-client.html On peut backuper des systèmes de fichiers voir même des systèmes de block avec la commande ''proxmox-backup-client'' en gardant les avantages de sauvegarde incrémentielle, chiffré etc... Mes exigences / contraintes : * Je ne veux pas que mon serveur distant puisse se connecter à mon serveur PBS (pour des raisons de sécurité) * Je met le password dans un fichier pour qu'il ne s'affiche pas dans les process * Installation obligatoire du binaire proxmox-backup-client sur le serveur distant * Connexion ssh par clé * Tunnel ssh pour bénéficier de la déduplication de PBS Créer une paire de clés SSH dédié ssh-keygen -t ed25519 -f ~/.ssh/id_pbs_backup On peut restreindre l'utilisation de ssh sur le serveur distant en éditant ''~/.ssh/authorized_keys'' no-pty,no-X11-forwarding,no-agent-forwarding,command="/bin/echo 'Tunnel only'" ssh-ed25519 AAAAC3Nza... (votre clé) Automatiser la connexion ssh sur le serveur PBS en éditant le fichier ''~/.ssh/config'' Host sauvegarde-distante HostName IP_DU_SERVEUR_DISTANT User utilisateur IdentityFile ~/.ssh/id_pbs_backup RemoteForward 8007 localhost:8007 Exemple d'un script qui permet de sauvegarder une machine distante #!/bin/bash # --- Configuration --- REMOTE_USER="utilisateur" REMOTE_HOST="ip_du_serveur_distant" PBS_PASSWORD="ton_mot_de_passe_pbs" PBS_REPOSITORY="utilisateur@localhost:8007:datastore" BACKUP_PATH="/chemin/a/sauvegarder" WEBHOOK_URL="https://votre-url-webhook.com/..." # Internes SSH_CONTROL="~/.ssh/pbs_tunnel_control" REMOTE_PASS_FILE="/tmp/.pbs_pass_tmp" START_TIME=$(date +%s) # --- Fonction Webhook --- send_notification() { curl -H "Content-Type: application/json" -X POST -d "{\"content\": \"$1\"}" "$WEBHOOK_URL" > /dev/null 2>&1 } send_notification "🚀 Début de la sauvegarde Proxmox pour **$REMOTE_HOST**." # 1. Ouverture du tunnel # -M : Mode maître / -S : Fichier de contrôle (socket) / -fN : Arrière-plan sans commande ssh -fN -M -S "$SSH_CONTROL" -R 8007:localhost:8007 "$REMOTE_USER@$REMOTE_HOST" # 2. Préparation du secret ssh -S "$SSH_CONTROL" "$REMOTE_USER@$REMOTE_HOST" "echo '$PBS_PASSWORD' > $REMOTE_PASS_FILE && chmod 600 $REMOTE_PASS_FILE" # 3. Sauvegarde ssh -S "$SSH_CONTROL" "$REMOTE_USER@$REMOTE_HOST" \ "proxmox-backup-client backup root.pxar:$BACKUP_PATH --repository $PBS_REPOSITORY --password-file $REMOTE_PASS_FILE" BACKUP_EXIT_CODE=$? END_TIME=$(date +%s) DURATION=$((END_TIME - START_TIME)) H_DURATION=$(printf '%02dh %02dm %02ds\n' $((DURATION/3600)) $((DURATION%3600/60)) $((DURATION%60))) # 4. Nettoyage ssh -S "$SSH_CONTROL" "$REMOTE_USER@$REMOTE_HOST" "rm -f $REMOTE_PASS_FILE" ssh -S "$SSH_CONTROL" -O exit "$REMOTE_USER@$REMOTE_HOST" # --- Notification de fin --- if [ $BACKUP_EXIT_CODE -eq 0 ]; then send_notification "✅ Sauvegarde réussie en **$H_DURATION**." else send_notification "❌ Échec de la sauvegarde sur **$REMOTE_HOST** après $H_DURATION (Code: $BACKUP_EXIT_CODE)." exit $BACKUP_EXIT_CODE fi