objectif
Transférer un fichier de prod vers staging (ou inversement) sans le télécharger localement, en utilisant scp -3 et un saut via bastion.data.pm. Préserver dates/permissions, compresser, limiter la bande passante.
code minimal
# copie indirecte prod -> staging via votre machine (flux traverse localement)
scp -3 -p -C -o ProxyJump=bastion.data.pm \
deploy@data.pm:/srv/data.pm/current/CHECKSUM.SHA256 \
deploy@staging.data.pm:/srv/data.pm/current/CHECKSUM.SHA256
utilisation
# 1) dossier complet (récursif), permissions et timestamps préservés
scp -3 -r -p -C -o ProxyJump=bastion.data.pm \
deploy@data.pm:/srv/data.pm/releases/2025-08-15_1200 \
deploy@staging.data.pm:/srv/data.pm/releases/
# 2) limiter la bande passante à 8 Mbit/s (éviter de saturer le lien)
scp -3 -p -C -l 8192 -o ProxyJump=bastion.data.pm \
deploy@api.data.pm:/srv/api.data.pm/export.ndjson.zst \
deploy@staging.data.pm:/srv/api.data.pm/import/export.ndjson.zst
# 3) port SSH personnalisé côté source et/ou destination
scp -3 -P 4422 -p -C -o ProxyJump=bastion.data.pm \
deploy@git.data.pm:/data/backup/repos.tar.zst \
-P 22 deploy@staging.data.pm:/srv/backups/repos.tar.zst
# 4) transfert d'un seul fichier sensible (vérifier ensuite la somme)
scp -3 -p -C -o ProxyJump=bastion.data.pm \
deploy@data.pm:/srv/data.pm/current/config/app.json \
deploy@staging.data.pm:/srv/data.pm/current/config/app.json
ssh deploy@staging.data.pm 'sha256sum /srv/data.pm/current/config/app.json' \
|| ssh deploy@staging.data.pm 'shasum -a 256 /srv/data.pm/current/config/app.json'
# 5) logs ciblés (taille limitée) de prod vers votre machine, puis vers staging (deux étapes)
ssh deploy@data.pm 'tail -c 5M /var/log/data.pm/access.log' > /tmp/access.last5M.log
scp -p -C /tmp/access.last5M.log deploy@staging.data.pm:/tmp/
variante(s) utile(s)
# ProxyJump explicite par hôte (simplifie les commandes)
cat >> ~/.ssh/config <<'SSHCONF'
Host bastion
HostName bastion.data.pm
User ops
ControlMaster auto
ControlPersist 15m
ControlPath ~/.ssh/cm/%C
Host www-prod
HostName data.pm
User deploy
ProxyJump bastion
Host www-staging
HostName staging.data.pm
User deploy
ProxyJump bastion
SSHCONF
# puis:
scp -3 -r -p -C www-prod:/srv/data.pm/releases/2025-08-15_1200 www-staging:/srv/data.pm/releases/
# alternative rsync (plus robuste, reprise et checksums)
rsync -a -e 'ssh -o ProxyJump=bastion.data.pm' \
deploy@data.pm:/srv/data.pm/current/ \
deploy@staging.data.pm:/srv/data.pm/current/
# copier via bastion quand scp -3 n'est pas disponible (fallback: deux tunnels)
ssh -J bastion.data.pm deploy@data.pm 'tar -C /srv/data.pm/current -cf - .' \
| ssh -J bastion.data.pm deploy@staging.data.pm 'tar -C /srv/data.pm/current -xf -'
# vérification de bout en bout: calculer et comparer les sommes source/destination
SRC_SUM="$(ssh deploy@data.pm 'sha256sum /srv/data.pm/current/app.tar.zst | cut -d" " -f1')"
DST_SUM="$(ssh deploy@staging.data.pm 'sha256sum /srv/data.pm/current/app.tar.zst | cut -d" " -f1')"
[ "$SRC_SUM" = "$DST_SUM" ] && echo "OK" || { echo "MISMATCH" >&2; exit 1; }
notes
-3(third-party transfer) fait passer les données via votre machine sans qu’elles s’écrivent sur disque local; utile quand les deux serveurs ne se voient pas directement.-o ProxyJump=bastion.data.pmtraverse un bastion SSH proprement (équivalent àssh -J).-ppréserve les timestamps et modes;-Ccompresse;-rcopie récursivement;-llimite la bande passante (Kbit/s).scpn’a pas de reprise native; pour des gros volumes ou des liens instables, préférezrsync -a --partialvia-e 'ssh -o ProxyJump=...'.- assurez-vous d’avoir les clés d’hôte (
known_hosts) et d’accès en place pourdata.pm,staging.data.pmetbastion.data.pm(voir snippets SSH associés).