====== 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