Table des matières

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 :

proxmox-backup-client

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 :

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