SSH : transfert de fichiers
SSH sert aussi à copier des fichiers de façon chiffrée. Les exemples utilisent un serveur monserveur (alias défini dans Configuration du client).
scp : copie simple
Section intitulée « scp : copie simple »scp fichier.txt monserveur:/tmp/ # poste vers serveurscp monserveur:/var/log/syslog ./syslog # serveur vers postescp -r dossier/ monserveur:/srv/ # dossier completscp -P 2222 fichier.txt deploy@serveur.exemple.com:/tmp/ # port différent (P majuscule)scp -J bastion fichier.txt deploy@10.0.0.20:/tmp/ # via un rebondscp serveur1:/tmp/a serveur2:/tmp/ # entre deux serveurs (via le poste)Depuis OpenSSH 9.0, scp utilise le protocole SFTP en interne (plus sûr que l’ancien protocole) ; la syntaxe est inchangée.
sftp : session interactive
Section intitulée « sftp : session interactive »sftp monserveurCommande (dans sftp) |
Rôle |
|---|---|
ls, cd, pwd |
Sur le serveur |
lls, lcd, lpwd |
Sur le poste local (préfixe l) |
get fichier |
Télécharge |
put fichier |
Envoie |
get -r dossier / put -r dossier |
Dossier complet |
mkdir, rm, rename |
Gestion distante |
bye ou exit |
Quitte |
Mode non interactif (scripts) :
echo "put archive.tar.gz /srv/depot/" | sftp -b - monserveursftp -b commandes.txt monserveurrsync : synchroniser efficacement
Section intitulée « rsync : synchroniser efficacement »rsync ne transfère que les différences, reprend un transfert interrompu et conserve les droits.
rsync -avz --progress dossier/ monserveur:/srv/site/ # copie et synchronisersync -avz --delete dossier/ monserveur:/srv/site/ # supprime côté serveur ce qui n'existe plus icirsync -avzn --delete dossier/ monserveur:/srv/site/ # SIMULATION (-n) : n'écrit rienrsync -avz monserveur:/var/backups/ ./sauvegardes/ # serveur vers postersync -avz -e "ssh -p 2222" dossier/ deploy@serveur.exemple.com:/srv/rsync -az --partial --progress gros.iso monserveur:/tmp/ # reprise d'un gros fichierrsync -avz --exclude 'node_modules' --exclude '.git' --exclude '.env' dossier/ monserveur:/srv/site/| Option | Rôle |
|---|---|
-a |
Mode archive : récursif, droits, dates, liens |
-v, -z, --progress |
Détails, compression, progression |
-n (--dry-run) |
Simulation |
--delete |
Supprime à destination les fichiers absents de la source |
--partial |
Garde les transferts partiels pour les reprendre |
--exclude |
Ignore des fichiers |
-e "ssh …" |
Commande SSH à utiliser (port, clé) |
--bwlimit=5000 |
Limite le débit (Ko/s) |
Monter un dossier distant : sshfs
Section intitulée « Monter un dossier distant : sshfs »sudo apt install sshfsmkdir -p ~/distantsshfs monserveur:/srv/site ~/distant # monte le dossier distantls ~/distantfusermount3 -u ~/distant # démonteLe dossier distant se manipule comme un dossier local (éditeur, cp). Options utiles : -o reconnect,ServerAliveInterval=15, -o ro (lecture seule). Peu adapté aux gros volumes ou aux accès fréquents : préférer rsync pour synchroniser.
Archives par un tube
Section intitulée « Archives par un tube »tar czf - dossier/ | ssh monserveur "cat > /tmp/dossier.tar.gz" # archive envoyée sans fichier intermédiairessh monserveur "tar czf - /srv/site" | tar xzf - -C ./restauration/ # archive récupérée et extraitessh monserveur "mysqldump --single-transaction boutique | gzip" > boutique.sql.gz # sauvegarde de base vers le posteUtilisateur limité au transfert de fichiers (SFTP avec chroot)
Section intitulée « Utilisateur limité au transfert de fichiers (SFTP avec chroot) »Pour un client qui doit déposer des fichiers sans accès à un shell :
sudo groupadd sftponlysudo useradd -m -s /usr/sbin/nologin -G sftponly clientsudo mkdir -p /srv/sftp/client/depotsudo chown root:root /srv/sftp /srv/sftp/client # le dossier chrooté doit appartenir à rootsudo chmod 755 /srv/sftp /srv/sftp/clientsudo chown client:client /srv/sftp/client/depot # seul dossier en écrituresudo tee /etc/ssh/sshd_config.d/50-sftp.conf <<'CONF'Match Group sftponly ChrootDirectory /srv/sftp/%u ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no PasswordAuthentication noCONFsudo sshd -t && sudo systemctl reload sshAjouter la clé publique du client dans /home/client/.ssh/authorized_keys (droits 700 et 600, propriétaire client). Tests (vérifiés sur Ubuntu 24.04 et 26.04) :
sftp client@serveur.exemple.com # affiche « depot »ssh client@serveur.exemple.com id # refusé : « This service allows sftp connections only. »Bonnes pratiques
Section intitulée « Bonnes pratiques »- Utiliser une clé dédiée et restreinte (voir Clés SSH,
restrictetcommand=) pour les transferts automatisés. - Toujours simuler (
rsync -n) avant--delete. - Vérifier l’intégrité des gros transferts :
sha256sum fichierdes deux côtés. - Planifier avec
cronou un timersystemd(voir systemd : timers) en journalisant la sortie.
Dépannage
Section intitulée « Dépannage »| Symptôme | Piste |
|---|---|
scp: dest open "…": Permission denied |
Droits du dossier distant pour l’utilisateur SSH |
rsync: command not found côté serveur |
sudo apt install rsync sur le serveur |
rsync error: some files could not be transferred |
Droits de lecture insuffisants ; consulter les messages précédents |
bad ownership or modes for chroot directory |
Le dossier chrooté (et ses parents) doit appartenir à root |
This service allows sftp connections only |
Normal pour un compte SFTP restreint |
sshfs : fusermount: failed to access mountpoint |
Dossier de montage inexistant, ou déjà monté |
| Les accents sont abîmés dans les noms de fichiers | Locale incohérente (UTF-8 des deux côtés) |
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Manuel :
man rsync,man sftp,man scp - Suite : Dépannage