GNU/Linux >> Tutoriels Linux >  >> Linux

Copier des fichiers en toute sécurité avec la commande SCP

La commande SCP (Secure Copy) est une commande non interactive permettant de copier en toute sécurité des fichiers et des répertoires entre deux systèmes. SCP utilise le protocole SSH pour le cryptage et l'authentification, ce qui en fait un moyen sécurisé de transférer des fichiers entre des serveurs distants.

Pas un lecteur? Regardez ce didacticiel vidéo associé ! Vous ne voyez pas la vidéo ? Assurez-vous que votre bloqueur de publicités est désactivé.

Si vous cherchez un guide génial pour utiliser la commande SCP, ne cherchez pas plus loin. Ce didacticiel vous montrera des exemples d'utilisation de la commande SCP, qui pourraient vous aider à devenir un utilisateur SCP confiant.

Prêt? Lisez la suite pour faire passer vos transferts de fichiers au niveau supérieur !

Prérequis

Ce tutoriel sera une démonstration pratique. Si vous souhaitez suivre, assurez-vous de remplir les conditions suivantes.

  • Vous aurez besoin de deux ordinateurs Linux pour servir de source de copie et de destination de copie sur le même réseau ou sur des réseaux différents. Ce didacticiel utilisera des ordinateurs Ubuntu 20.04, comme indiqué dans le tableau ci-dessous.
Nom de l'ordinateur Désignation
ubuntu1 Hébergeur source
ubuntu2 Hôte de destination
  • S'il y a un pare-feu sur chacun ou entre les deux ordinateurs, assurez-vous que le port 22 est ouvert.
  • Ce didacticiel suppose que vous avez déjà ouvert une session SSH et que vous vous êtes connecté aux deux ordinateurs.

Copier un fichier à l'aide de la commande SCP

Il peut y avoir de nombreuses raisons pour lesquelles vous souhaitez copier des fichiers d'un système à un autre. Peut-être à des fins de sauvegarde, répliquer des fichiers de configuration ou simplement vouloir avoir une copie des fichiers. Quelle que soit la raison, la commande SCP est là pour vous.

La syntaxe de base de la commande SCP est la suivante.

scp [Option] [[email protected]]SRC_HOST:]your_file1 [[email protected]]DEST_HOST:]you_file2

Où :

  • Option – spécifie toutes les options à utiliser, telles que le chiffrement ou la limite. Vous utiliserez certaines options courantes dans ce didacticiel.
  • user1 – est le nom d'utilisateur sur l'hôte source.
  • SRC_HOST – est le nom d'hôte ou l'adresse IP de la copie source .
  • your_file1 – est le chemin et le nom du fichier que vous souhaitez copier.
  • DEST_HOST – est le nom d'hôte ou l'adresse IP de la destination de la copie .
  • user2 – est le nom d'utilisateur ayant accès à l'hôte de destination.
  • your_file2 – est le chemin et le nom du fichier que vous souhaitez copier depuis your_file1

Remarque :Vous pouvez spécifier vos chemins de fichiers à l'aide d'un chemin relatif ou absolu sur le système local. Mais les chemins de fichiers sur le système distant doivent utiliser un nom d'utilisateur avec un chemin absolu.

Maintenant que vous comprenez la syntaxe de base, vous pouvez commencer par l'exercice de copie de fichiers à l'aide de la commande SCP.

1. Pour commencer, créez un nouveau fichier appelé backup.txt dans le répertoire personnel sur ubuntu1 .

# Change into the home directory
cd ~
# Create a text file with content
echo "This is my backup file" > backup.txt
# Display the file content to confirm
cat backup.txt
# Show the SHA1 hash 

2. Ensuite, créez un nouveau répertoire nommé sauvegarde sur ubuntu2. Ce répertoire sera le chemin de destination de la copie du fichier.

# Creat the backup directory
mkdir ~/backup && cd ~/backup
# Display the full path
pwd

3. Maintenant, exécutez la commande scp ci-dessous sur ubuntu1 pour copier backup.txt à la sauvegarde répertoire sur ubuntu2. Assurez-vous de remplacer le nom d'utilisateur et le chemin par les vôtres.

scp backup.txt [email protected]:/home/ata/backup

Si vous souhaitez copier le fichier sous un nom différent, ajoutez le nouveau nom de fichier au chemin de destination. Exemple :scp backup.txt [email protected]:/home/ata/backup/backup2.txt

4. Si c'est la première fois que vous vous connectez à ubuntu2 hôte, tapez yes à l'invite de confirmation et appuyez sur Entrée.

5. Ensuite, tapez le mot de passe du compte utilisateur sur ubuntu2 et appuyez sur Entrée. Une fois que vous avez entré le mot de passe correct, la copie du fichier se poursuivra.

6. Après avoir copié le fichier, passez à votre ubuntu2 terminal et exécutez la commande ci-dessous pour répertorier le contenu du répertoire.

ls

Confirmez que le fichier backup.txt existe et vous avez réussi à copier le fichier.

7. Ensuite, affichez le contenu du fichier copié pour confirmer que le fichier est intact sur ubuntu2 .

cat backup.txt

8. Enfin, pour confirmer que les fichiers sont identiques, obtenez la somme de contrôle SHA1 de chaque fichier sur les deux machines et comparez les valeurs. Cette étape est une mesure supplémentaire pour vérifier que l'intégrité du fichier n'a pas changé pendant le transfert.

# on ubuntu1 and ubuntu2
sha1sum backup.txt

Exécuter une copie récursive avec la commande SCP

Dans la section précédente, vous avez appris à copier des fichiers individuels d'un système local vers un système distant à l'aide de la commande SCP. Vous devez souvent copier un répertoire entier avec ses sous-répertoires et fichiers dans des scénarios réels.

La copie de répertoires entiers s'applique généralement aux scénarios de sauvegarde. Supposons que votre serveur (ubuntu1) exécute un serveur Web dont les fichiers se trouvent dans /var/www/ annuaire. Vous trouverez ci-dessous l'exemple d'arborescence de dossiers.

/var/www
├── html
│   └── index.html
└── your_domain
    └── index.html

Vous pouvez facilement sauvegarder l'intégralité du dossier vers une destination distante avec la commande SCP.

Dans la plupart des cas, les opérations de sauvegarde s'exécutent via des scripts d'automatisation et des tâches planifiées ou des tâches cron. Cet exemple montre comment sauvegarder manuellement un répertoire entier.

1. Tout d'abord, créez une sauvegarde de serveur Web répertoire sur ubuntu2 .

# Create the backup directory on ubuntu2
mkdir ~/web-server-backup
# Display the full backup directory path
realpath ~/web-server-backup

2. Ensuite, revenez à ubuntu1 terminal et exécutez la commande SCP ci-dessous. Le commutateur -r active le mode de copie récursive, ce qui signifie que SCP copiera l'intégralité de /var/www/ du dossier supérieur jusqu'au dernier fichier.

scp -r /var/www/ [email protected]:/home/ata/web-server-backup

3. Maintenant, exécutez la commande tree sur les deux systèmes pour comparer la structure des répertoires. Sur ubuntu1 , vous afficherez l'arborescence des répertoires pour /var/www . Sur Ubuntu2, vous afficherez l'arborescence du répertoire de sauvegarde, qui est /home/ata/web-server-backup dans cet exemple.

# on ubuntu1
tree /var/www/

# on ubuntu2
tree /home/ata/web-server-backup

Filtrage des extensions de fichier à copier

Supposons que vous ayez un répertoire sur votre système local contenant des types de fichiers mixtes avec différentes extensions. Vous êtes censé copier tous les fichiers de ce dossier sur un ordinateur distant à l'aide de la commande SCP dans le cadre de votre travail. Vous savez déjà comment copier des répertoires entiers.

Mais, la condition est que vous ne devez copier que tous les fichiers avec le *.txt extension. Ne pas paniquer; vous êtes toujours sur la bonne voie et la solution n'est pas loin de ce que vous avez déjà fait dans les sections précédentes. Pour filtrer les fichiers à copier, vous utiliserez des caractères génériques.

Les caractères génériques courants sont l'astérisque (*), qui représente zéro, un ou plusieurs caractères, et le point d'interrogation (?), qui signifie un seul caractère.

1. Tout d'abord, créez le dossier d'exemple et les fichiers sur ubuntu1 que vous copierez plus tard. Exécutez la commande ci-dessous pour créer le dossier foo et les fichiers avec les extensions *.txt, *.doc et *.ppt.

# Create a directory named foo
mkdir foo && cd foo
# Create five *.txt files
touch {1..5}.txt
# Create five *.doc files
touch {1..5}.doc
# Create five *.ppt files
touch {1..5}.ppt
# List all the files in the directory

2. Ensuite, passez à votre terminal ubuntu2 et créez un répertoire appelé bar . Ce répertoire sera votre chemin de destination de copie.

# Create the folder
mkdir bar
# Display the new folder's full path
realpath bar

3. Revenez à votre ubuntu1 terminal et exécutez la commande SCP ci-dessous. Notez que cette fois, au lieu de spécifier un dossier spécifique comme source, votre source contient un caractère générique qui correspond à tous les fichiers avec un txt extension à l'intérieur de foo dossier.

scp *.txt [email protected]:/home/ata/bar/

Tapez le mot de passe du compte et la copie devrait continuer. Comme vous pouvez le voir ci-dessous, la commande SCP a uniquement copié le txt fichiers bien que le dossier source ait d'autres types de fichiers.

4. Enfin, passez au terminal ubuntu2 et répertoriez les fichiers dans la bar répertoire.

ls -l bar/

Le résultat doit confirmer que seuls les fichiers *.txt existent dans le répertoire.

Activation de l'authentification par clé

Taper le mot de passe du compte de destination peut être fastidieux et fastidieux. De plus, l'authentification par mot de passe est moins sécurisée et ne convient pas à l'automatisation. Quelle est l'alternative ? Activez l'authentification par clé.

Comme vous le savez, la commande SCP utilise SSH sous le capot. Et SSH vous donne la possibilité de vous authentifier à l'aide de clés SSH au lieu de mots de passe. Les étapes de configuration de SCP avec l'authentification par clé SSH sont les suivantes.

1. Sur ubuntu1 , générez une paire de clés SSH en exécutant la commande ssh-keygen.

ssh-keygen -t rsa

2. Appuyez sur Entrée pour accepter le chemin par défaut dans lequel enregistrer la clé. Enfin, appuyez deux fois sur Entrée pour ne pas ajouter de phrase secrète à la clé.

Comme vous pouvez le voir ci-dessous, la commande a créé deux fichiers. Le fichier id_rsa est votre clé privée, qui restera sur l'ordinateur source. Inversement, vous devez copier l'id_rsa.pub sur l'hôte de destination.

3. Exécutez la commande ci-dessous pour copier votre clé publique sur l'hôte distant ubuntu2 .

ssh-copy-id [email protected]

Entrez le mot de passe du compte de destination à l'invite pour continuer à copier la clé publique.

4. Maintenant que vous avez généré la paire de clés SSH, exécutez la commande ci-dessous pour copier en toute sécurité le backup.txt fichier de ubuntu1 à ubuntu2 . L'argument -i ~/.ssh/id_rsa indique à la commande SCP de s'authentifier avec le fichier de clé SSH.

scp -i ~/.ssh/id_rsa backup.txt [email protected]:backup3.txt

La commande SCP ne demande plus le mot de passe, comme vous pouvez le voir ci-dessous.

C'est ça! Vous vous êtes débarrassé de cette embêtante invite de mot de passe et vous avez rendu votre session SSH encore plus sécurisée.

Conclusion

Cet article vous a appris à utiliser la commande SCP pour copier des fichiers entre deux systèmes Linux en toute sécurité. Vous avez également appris à utiliser SCP avec des clés SSH pour l'authentification. Maintenant que vous connaissez la commande SCP, essayez-la la prochaine fois que vous aurez besoin d'en copier une dans des fichiers en masse entre ordinateurs.


Linux
  1. Rechercher des fichiers et des répertoires sous Linux avec la commande find

  2. Copiez et collez sur la ligne de commande Linux avec xclip

  3. 14 exemples de commandes SCP pour transférer des fichiers en toute sécurité sous Linux

  4. Divisez les fichiers en morceaux avec la commande split intégrée

  5. Comment utiliser la commande Rsync sous Linux ?

Commande Cp sous Linux (Copier des fichiers)

Copier des fichiers et créer des répertoires cibles en même temps

Comment rechercher des fichiers avec la commande fd sous Linux

Un moyen facile de fusionner des fichiers avec la commande Cat

Commande Linux SCP pour transférer des fichiers en toute sécurité

Comment rechercher des fichiers avec des dizaines de critères avec la commande Bash Find