Linux / Commande scp : copier des fichiers locaux et distants avec SSH

scp copie des fichiers entre emplacements locaux et distants en utilisant SSH pour les transferts réseau. Écrivez la source avant la destination et utilisez utilisateur@hôte:chemin pour un emplacement distant. Depuis OpenSSH 9.0, scp utilise SFTP par défaut ; son nom ne signifie donc pas que le protocole SCP historique est toujours employé.

Préparer la source, le compte et le chemin distant

SSH signifie Secure Shell et fournit la connexion chiffrée et l’authentification. SFTP, SSH File Transfer Protocol, assure les opérations de transfert dans le mode courant. Avant la copie, confirmez le serveur, sa clé d’hôte, le compte autorisé, les droits sur les chemins et l’espace disponible.

scp [OPTIONS] SOURCE DESTINATION

Dans les exemples, report.txt doit exister localement, alice est le compte distant et /home/alice/ un répertoire qui existe et accepte l’écriture. Remplacez les noms et chemins par vos valeurs ; le serveur d’exemple n’est pas une destination de transfert réelle.

scp report.txt alice@server.example.com:/home/alice/

Cette commande envoie le fichier local vers le répertoire distant. Le nom report.txt est conservé dans ce répertoire. Si un fichier correspondant existe, il peut être remplacé sans confirmation de sauvegarde : choisissez une nouvelle destination ou préservez la version utile avant la copie.

Un chemin distant absolu commence par /. Un chemin distant relatif est normalement interprété par rapport au répertoire de connexion du compte ; les restrictions du serveur peuvent modifier la vue des chemins. Un échec de chemin ne justifie pas d’élargir les droits du compte.

Inverser la copie et vérifier son résultat

scp alice@server.example.com:/home/alice/report.txt .

Ici, la source est distante et la destination . désigne votre répertoire local courant. Vérifiez ce répertoire avant d’exécuter : un report.txt local existant peut aussi être remplacé. Le caractère : identifie un emplacement distant dans l’argument ; c’est surtout l’ordre source puis destination qui détermine le sens de copie.

Pour une copie locale vers une nouvelle destination distante explicite, puis une vérification de nom et de taille uniquement après succès :

scp report.txt alice@server.example.com:/home/alice/report-copy.txt && ssh alice@server.example.com 'ls -lh /home/alice/report-copy.txt'

Le répertoire distant doit exister. && évite de lancer ls après un échec de scp. La vérification utilise une commande distante par SSH ; elle suppose qu’un shell et cette commande sont autorisés. Un compte limité à SFTP peut transférer sans permettre cette vérification par shell.

scp retourne 0 en cas de succès et une valeur supérieure à 0 en cas d’erreur. L’absence de progression affichée ne signifie pas nécessairement un échec. À l’inverse, la présence d’un fichier ne prouve pas qu’il est complet après une interruption ; lisez le résultat de la commande.

Nom et taille sont un premier contrôle, pas une comparaison complète du contenu. Pour un fichier important, comparez une somme de contrôle de la source avec celle de la copie, selon les outils disponibles des deux côtés. Un fichier modifié pendant sa copie nécessite aussi une méthode cohérente pour l’application concernée.

Choisir le port, l’identité et la récursion

scp -P 2222 -i ~/.ssh/id_ed25519 report.txt alice@server.example.com:/home/alice/
scp -r project/ alice@server.example.com:/home/alice/

Le port de scp se choisit avec -P majuscule, contrairement au -p de ssh. -i sélectionne une identité déjà autorisée ; la clé privée reste sur votre poste. La connexion SSH et la vérification de clé d’hôte expliquent les mêmes étapes d’identité du serveur et d’authentification.

-r copie récursivement une arborescence. La destination indiquée ici est un répertoire existant. Inspectez le volume et les liens symboliques avant de l’utiliser : scp suit les liens symboliques rencontrés pendant la traversée et peut donc copier des données au-delà de l’arborescence que vous imaginiez.

Ne transposez pas automatiquement les règles de barre oblique finale d’un autre outil à scp. Les commandes de copie ne sont pas un mécanisme de synchronisation de suppressions, d’historique ou de sauvegarde complète de tous les attributs du système de fichiers.

Comprendre -p, SFTP et les problèmes de noms

Option Rôle
-r Copier les répertoires récursivement, en suivant les liens symboliques rencontrés.
-P port Choisir le port SSH distant.
-i fichier Choisir une identité pour l’authentification.
-p Préserver les dates de modification et d’accès ainsi que les bits de mode, dans les limites du système.
-O Forcer le protocole SCP historique lorsque sa compatibilité est réellement nécessaire.

-p ne constitue pas une sauvegarde de tous les propriétaires, listes de contrôle d’accès et attributs étendus. Vérifiez les attributs nécessaires à votre usage et choisissez un outil adapté si leur conservation est indispensable.

Pour un nom local contenant des espaces, protégez l’argument de l’interprétation du shell. Pour un nom local contenant un deux-points, rendez le chemin local explicite, par exemple avec ./ devant le nom, pour éviter qu’il soit interprété comme hôte:chemin. Les chemins distants et les caractères génériques demandent également une attention au protocole réellement utilisé.

La note de publication OpenSSH 9.0 explique le passage à SFTP et les différences de traitement des noms. Avec -O, l’ancien protocole utilise le shell distant pour certaines expansions : les anciennes règles de double interprétation ne doivent pas être appliquées indistinctement au mode SFTP.

N’ajoutez pas -O pour contourner une alerte de clé d’hôte ou un refus d’authentification. Pour un serveur ancien, confirmez d’abord la limitation du sous-système SFTP et les conditions de compatibilité. Une erreur de droit, de nom ou d’espace disque demande une autre correction.

scp n’offre pas une reprise générale de transfert interrompu comme objectif principal. Pour de gros transferts répétés, examinez les fonctions de reprise de SFTP ou de synchronisation de rsync selon les besoins et les serveurs disponibles. Le manuel officiel scp précise les chemins, options et codes de sortie de votre client.