Maîtriser SCP : Transférer des fichiers en toute sécurité entre des hôtes locaux et distants

Apprenez la syntaxe scp pour les téléchargements sécurisés, les copies récursives, les ports SSH personnalisés et la préservation des attributs de fichiers.

Maîtrisez SCP : Transférez des fichiers en toute sécurité entre machines locales et distantes

scp copie des fichiers entre machines via SSH. Il est utile lorsque vous avez besoin d'un transfert rapide et sécurisé et que vous avez déjà un accès SSH au serveur.

Pour les tâches de synchronisation volumineuses, les transferts interrompus ou les déploiements répétés, rsync est généralement un meilleur outil. Pour les copies uniques simples, scp est simple et disponible sur la plupart des systèmes de type Unix.

Syntaxe de base

scp [OPTIONS] SOURCE DESTINATION

Les chemins locaux ressemblent à des chemins de fichiers normaux. Les chemins distants utilisent cette forme :

[utilisateur@]hôte:/chemin/vers/fichier

Si vous omettez utilisateur@, scp utilise votre nom d'utilisateur local pour la connexion SSH. Si le serveur SSH distant utilise un port non standard, utilisez -P avec un P majuscule. Le -p minuscule signifie préserver les attributs du fichier.

Télécharger un fichier

Pour copier un fichier local vers un serveur distant :

scp rapport_local.txt utilisateur_distant@exemple_distant.com:/home/utilisateur_distant/documents/

Ceci envoie rapport_local.txt de votre répertoire actuel vers le répertoire documents distant.

Pour renommer le fichier lors du téléchargement, incluez le nom de fichier de destination :

scp rapport_local.txt utilisateur_distant@exemple_distant.com:/home/utilisateur_distant/documents/rapport-2026.txt

Télécharger un fichier

Pour copier un fichier distant vers votre répertoire local actuel :

scp utilisateur_distant@exemple_distant.com:~/archive_serveur.tar.gz .

Pour l'enregistrer sous un nom local différent :

scp utilisateur_distant@exemple_distant.com:~/archive_serveur.tar.gz ./archive-serveur-prod.tar.gz

Copier un répertoire récursivement

Utilisez -r pour copier une arborescence de répertoires :

scp -r dossier_projet_local utilisateur_distant@exemple_distant.com:/var/www/

Ceci copie le répertoire et son contenu vers la destination. Notez que scp -r suit les liens symboliques qu'il rencontre lors du parcours, ce qui peut copier plus de données que prévu.

Utiliser un port SSH personnalisé

Si SSH écoute sur le port 2222, utilisez -P majuscule :

scp -P 2222 config_locale.ini utilisateur@exemple_distant.com:/tmp/

Vous pouvez également placer le port dans votre configuration SSH, puis utiliser l'alias d'hôte :

Hôte prod-web
  NomHôte exemple_distant.com
  Utilisateur utilisateur
  Port 2222

Ensuite :

scp config_locale.ini prod-web:/tmp/

Préserver les heures et les modes

Utilisez -p minuscule pour préserver les heures de modification, les heures d'accès et les bits de mode du fichier source :

scp -p script_important.sh utilisateur@serveur:/tmp/

La propriété n'est généralement pas préservée comme avec les outils d'archivage. Si la propriété est importante, définissez-la après le transfert ou utilisez un processus de déploiement conçu pour cette exigence.

Résoudre les problèmes avec le mode verbeux

Utilisez -v pour voir les détails de la connexion SSH :

scp -v grosse_sauvegarde.zip utilisateur@serveur:/sauvegardes/

La sortie verbeuse aide à diagnostiquer les échecs d'authentification, les problèmes de configuration SSH, les problèmes de clé d'hôte et les ports inattendus.

Activer la compression quand elle est utile

-C transmet la compression SSH à la connexion :

scp -C journaux.txt utilisateur@serveur:/tmp/

La compression peut aider sur les liaisons lentes avec des données textuelles lourdes. Elle peut ne pas être très utile pour les fichiers déjà compressés comme .zip, .gz, .jpg ou .mp4.

Copier entre deux hôtes distants

Vous pouvez utiliser scp avec deux chemins distants :

scp utilisateur_a@serveur_alpha:/data/bd.sql utilisateur_b@serveur_beta:/sauvegarde/

Dans la version actuelle d'OpenSSH scp, les copies de distant à distant sont transférées via votre machine locale par défaut. Utilisez -R uniquement lorsque vous voulez intentionnellement que l'hôte d'origine se connecte directement à l'hôte de destination :

scp -R utilisateur_a@serveur_alpha:/data/bd.sql utilisateur_b@serveur_beta:/sauvegarde/

Avec -R, l'hôte d'origine doit pouvoir s'authentifier auprès de la destination sans demander de mot de passe.

Éviter les erreurs courantes

Mettez entre guillemets les chemins distants qui contiennent des espaces :

scp "fichier local.txt" 'utilisateur@serveur:/tmp/fichier local.txt'

Utilisez des chemins locaux absolus ou clairement relatifs lorsqu'un nom de fichier local contient un deux-points, car scp traite hôte:chemin comme un chemin distant :

scp ./rapport:final.txt utilisateur@serveur:/tmp/

Vérifiez deux fois les chemins de destination avant de copier en tant que root ou dans des répertoires système. scp écrasera un fichier de destination existant sans demander en utilisation normale.

SCP ou Rsync ?

Utilisez scp pour les copies sécurisées simples :

  • Télécharger un fichier.
  • Télécharger une archive.
  • Copier un petit répertoire une fois.
  • Déplacer des données dans un environnement SSH uniquement.

Utilisez rsync lorsque vous avez besoin de transferts reprenables, de synchronisations répétées efficaces, de gestion des suppressions, de motifs d'exclusion, de sommes de contrôle ou de meilleurs contrôles de progression.

À retenir

Utilisez scp source destination pour des transferts de fichiers rapides via SSH. Ajoutez -r pour les répertoires, -P pour un port SSH personnalisé, -p pour préserver les heures et les modes, et -v lorsque vous devez résoudre des problèmes de connexion SSH.