Skip to content

S3cmd : synchronise et sauvegarde vers Amazon S3 gratuitement (guide 2026)

Brandon Visca
Updated date:

💡 TL;DR : Installe S3cmd (sudo apt install s3cmd), configure avec s3cmd --configure (clés AWS + région), puis utilise s3cmd sync /local/ s3://bucket/ pour synchroniser. Compatible MinIO, Backblaze B2, OVH. Gratuit et open source.

S3cmd — gérer Amazon S3 en CLI

Tu veux uploader, synchroniser ou sauvegarder des fichiers vers Amazon S3 (ou un service compatible) sans passer par la console AWS ? S3cmd est le client CLI qu’il te faut. Open source, gratuit, compatible avec tous les services S3-like, il tourne parfaitement dans des scripts cron ou des pipelines de déploiement.

J’utilise S3cmd pour sauvegarder mes dumps MySQL et configs Proxmox vers un bucket S3-compatible. Ça tourne en cron chaque nuit depuis 2 ans sans accroc.

Table des matières

Table des matières

Pourquoi choisir S3cmd

S3cmd n’est pas le seul client S3 CLI (il y a aussi le AWS CLI officiel, rclone…), mais il a quelques atouts :

Pour la gestion des permissions et des clés AWS, pense à appliquer les bonnes pratiques de sécurisation de ton serveur Linux — les clés IAM méritent autant d’attention que les accès SSH.


Installation

Ubuntu / Debian

sudo apt update && sudo apt install s3cmd

Via pip (toutes plateformes, Python requis)

pip install s3cmd

macOS (Homebrew)

brew install s3cmd

Vérifie l’installation :

s3cmd --version

Configuration

Lance l’assistant de configuration :

s3cmd --configure

Il te demande :

La configuration est sauvegardée dans ~/.s3cfg.

Exemple pour un service S3-compatible (ex. MinIO)

s3cmd --configure \
  --access_key=TON_ACCESS_KEY \
  --secret_key=TON_SECRET_KEY \
  --host=minio.ton-serveur.com \
  --host-bucket="%(bucket)s.minio.ton-serveur.com" \
  --no-ssl

Ou édite directement ~/.s3cfg :

[default]
access_key = TON_ACCESS_KEY
secret_key = TON_SECRET_KEY
host_base = minio.ton-serveur.com
host_bucket = %(bucket)s.minio.ton-serveur.com
use_https = False

⚠️ Sécurité : Le fichier ~/.s3cfg contient tes clés en clair. Assure-toi que seul ton utilisateur peut le lire : chmod 600 ~/.s3cfg.


Commandes essentielles

Lister tes buckets et fichiers

# Lister tous les buckets
s3cmd ls

# Lister le contenu d'un bucket
s3cmd ls s3://mon-bucket/

# Lister récursivement
s3cmd ls --recursive s3://mon-bucket/

Créer et supprimer un bucket

# Créer
s3cmd mb s3://mon-nouveau-bucket

# Supprimer (doit être vide)
s3cmd rb s3://mon-bucket-vide

Uploader et télécharger

# Upload un fichier
s3cmd put fichier.txt s3://mon-bucket/

# Upload dans un sous-dossier
s3cmd put fichier.txt s3://mon-bucket/dossier/

# Télécharger un fichier
s3cmd get s3://mon-bucket/fichier.txt ./

# Upload récursif d'un dossier
s3cmd put --recursive /chemin/local/ s3://mon-bucket/dossier/

Copier, déplacer, supprimer

# Copier entre buckets
s3cmd cp s3://bucket-source/fichier.txt s3://bucket-dest/

# Déplacer
s3cmd mv s3://mon-bucket/ancien.txt s3://mon-bucket/nouveau.txt

# Supprimer un fichier
s3cmd del s3://mon-bucket/fichier.txt

# Supprimer récursivement
s3cmd del --recursive s3://mon-bucket/dossier/

Infos et taille

# Infos sur un objet (taille, hash, ACL...)
s3cmd info s3://mon-bucket/fichier.txt

# Taille totale d'un bucket
s3cmd du s3://mon-bucket/

Synchronisation et sauvegardes automatiques

Sync de base

# Sync local → S3 (upload uniquement les nouveaux/modifiés)
s3cmd sync /chemin/local/ s3://mon-bucket/backup/

# Sync S3 → local (download)
s3cmd sync s3://mon-bucket/backup/ /chemin/local/

# Dry run (aperçu sans exécuter)
s3cmd sync --dry-run /chemin/local/ s3://mon-bucket/backup/

# Supprimer les fichiers supprimés en local
s3cmd sync --delete-removed /chemin/local/ s3://mon-bucket/backup/

Automatiser avec cron

Ajoute dans crontab -e :

# Sauvegarde quotidienne à 2h du matin
0 2 * * * s3cmd sync /var/backups/ s3://mon-bucket/backups/ >> /var/log/s3backup.log 2>&1

# Sauvegarde dump MySQL + upload
0 3 * * * mysqldump -u root -p monpass ma_bdd > /tmp/dump.sql && s3cmd put /tmp/dump.sql s3://mon-bucket/dumps/dump-$(date +\%Y\%m\%d).sql

💡 Astuce : Utilise --skip-existing pour ignorer les fichiers déjà présents et accélérer les syncs sur de gros volumes.

Pour surveiller que tes syncs S3 tournent bien, UptimeRobot peut monitorer un endpoint ou un heartbeat déclenché en fin de script.


Sécurité et bonnes pratiques

Chiffrement côté client (GPG)

# Upload chiffré
s3cmd put --encrypt fichier_sensible.sql s3://mon-bucket/

# Download + déchiffrement automatique
s3cmd get s3://mon-bucket/fichier_sensible.sql

Chiffrement côté serveur (AWS SSE)

s3cmd put --server-side-encryption fichier.txt s3://mon-bucket/

Utilise un fichier de config par projet

# Config dédiée pour un projet
s3cmd -c ~/.s3cfg-projet-client sync /data/ s3://bucket-client/

Vérifie les permissions avant de mettre en prod

# Afficher les ACL d'un objet
s3cmd info s3://mon-bucket/fichier.txt | grep ACL

Sauvegarde de configuration

Si tu gères plusieurs serveurs, la gestion de sauvegardes multi-plateformes avec Vanderplanki peut compléter ta stratégie S3 pour d’autres types de données.


Conclusion

S3cmd fait le boulot sans fioriture : upload, sync, backup automatisé, chiffrement. C’est l’outil parfait pour intégrer S3 dans tes scripts cron ou tes pipelines de déploiement. Si tu bosses avec MinIO en self-hosted ou Backblaze B2 pour les coûts, ça marche pareil — change juste l’endpoint dans ~/.s3cfg. La référence complète des commandes est dans la documentation officielle S3cmd.

Pour aller plus loin

Articles connexes

Previous
Exchange Online : bloquer les transferts email automatiques avec PowerShell (2026)
Next
Importer un fichier PST dans Outlook 365 : 2 méthodes qui marchent (2026)