Transfert de fichiers de distant vers local à l'aide de SCP

Transfert de fichiers de distant vers local à l'aide de SCP
Shell

Copie de fichiers en toute sécurité : un guide d'utilisation de SCP

Secure Copy Protocol (SCP) est un outil puissant pour transférer en toute sécurité des fichiers et des répertoires entre un serveur distant et une machine locale. Si vous utilisez fréquemment SSH pour accéder à votre serveur, savoir comment utiliser efficacement SCP peut rationaliser votre flux de travail, garantissant que vous pouvez copier rapidement et en toute sécurité les fichiers importants de votre serveur distant vers votre système local.

Dans ce guide, nous vous guiderons à travers les étapes pour copier un dossier distant nommé « foo » dans votre répertoire local à l'adresse /home/user/Desktop. Que vous gériez des sauvegardes, déployiez du code ou ayez simplement besoin de déplacer des fichiers, comprendre les commandes SCP rendra vos tâches plus faciles et plus efficaces.

Commande Description
scp -r Copie en toute sécurité des répertoires entiers de la machine distante vers la machine locale.
paramiko.SFTPClient.from_transport() Crée un client SFTP à partir d'un transport SSH existant.
os.makedirs() Crée un répertoire de manière récursive, garantissant que tous les répertoires de niveau intermédiaire sont créés.
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) Ajoute automatiquement la clé d'hôte du serveur sans invite, utile pour les scripts.
scp.listdir_attr() Répertorie les attributs des fichiers dans un répertoire, permettant la fonctionnalité de copie récursive.
paramiko.S_ISDIR() Vérifie si un chemin donné est un répertoire, facilitant la copie récursive.
scp.get() Copie un fichier du serveur distant vers la machine locale.

Explication détaillée des scripts SCP

Le premier exemple de script montre l'utilisation du scp -r commande pour copier un répertoire distant sur une machine locale. Le scp La commande, qui signifie Secure Copy Protocol, est un outil de ligne de commande qui utilise SSH pour transférer des fichiers en toute sécurité entre un hôte distant et une machine locale. Le -r L'indicateur dans la commande spécifie que l'opération doit être récursive, ce qui signifie qu'elle copiera tous les fichiers et répertoires du répertoire spécifié. La structure de commande est simple : scp -r user@remote_host:/path/to/remote/folder /home/user/Desktop/. Ici, user@remote_host spécifie l'utilisateur distant et l'hôte, et /path/to/remote/folder et /home/user/Desktop/ sont respectivement les chemins source et de destination.

Le deuxième exemple est un script shell qui automatise le processus SCP. Ce script définit des variables pour l'utilisateur distant, l'hôte et les chemins, ce qui facilite leur réutilisation et leur modification. Le script utilise scp -r dans un script Bash pour transférer des fichiers, ce qui est utile dans les scénarios où des transferts répétitifs sont nécessaires. Il comprend également un message de notification pour informer l'utilisateur lorsque le transfert est terminé. Le troisième exemple utilise Python avec la bibliothèque Paramiko, particulièrement utile pour les workflows plus complexes ou automatisés. Le script configure un client SSH et utilise le paramiko.SFTPClient.from_transport() méthode pour créer une session SFTP. Il définit ensuite une fonction pour copier récursivement les fichiers du serveur distant vers le répertoire local en utilisant scp.listdir_attr() et dix pour différencier les fichiers et les répertoires. Cette approche est bénéfique pour ceux qui préfèrent les scripts en Python et doivent intégrer la fonctionnalité de transfert de fichiers dans des scripts d'automatisation plus volumineux.

Utilisation de SCP pour transférer des fichiers d'un serveur distant vers une machine locale

Script Shell pour SCP

# Basic SCP command to copy a remote folder to a local directory
scp -r user@remote_host:/path/to/remote/folder /home/user/Desktop/

# Breakdown of the command:
# scp: invokes the SCP program
# -r: recursively copies entire directories
# user@remote_host:/path/to/remote/folder: specifies the user and path to the remote folder
# /home/user/Desktop/: specifies the local destination directory

# Example usage with real values:
scp -r user@example.com:/var/www/foo /home/user/Desktop/

Automatisation du transfert SCP avec un script Shell

Script Shell pour automatiser SCP

#!/bin/bash
# This script automates the SCP process

# Variables
REMOTE_USER="user"
REMOTE_HOST="remote_host"
REMOTE_PATH="/path/to/remote/folder"
LOCAL_PATH="/home/user/Desktop/"

# Execute SCP command
scp -r ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH} ${LOCAL_PATH}

# Notify user of completion
echo "Files have been copied successfully from ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH} to ${LOCAL_PATH}"

Script Python pour le transfert de fichiers SCP

Script Python utilisant la bibliothèque Paramiko

import paramiko
import os

# Establish SSH client
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('remote_host', username='user', password='password')

# SCP command
scp = paramiko.SFTPClient.from_transport(ssh.get_transport())

# Define remote and local paths
remote_path = '/path/to/remote/folder'
local_path = '/home/user/Desktop/'

# Function to recursively copy files
def recursive_copy(remote_path, local_path):
    os.makedirs(local_path, exist_ok=True)
    for item in scp.listdir_attr(remote_path):
        remote_item = remote_path + '/' + item.filename
        local_item = os.path.join(local_path, item.filename)
        if paramiko.S_ISDIR(item.st_mode):
            recursive_copy(remote_item, local_item)
        else:
            scp.get(remote_item, local_item)

# Start copy process
recursive_copy(remote_path, local_path)

# Close connections
scp.close()
ssh.close()
print(f"Files have been copied successfully from {remote_path} to {local_path}")

Utilisation avancée de SCP : trucs et astuces

Au-delà de l'usage basique de scp pour copier des fichiers et des répertoires, il existe plusieurs techniques et options avancées qui peuvent améliorer votre expérience de transfert de fichiers. Une fonctionnalité utile est la possibilité de limiter la bande passante utilisée pendant le transfert, ce qui peut être particulièrement utile lorsque vous travaillez avec des ressources réseau limitées. Ceci peut être réalisé en utilisant le -l option suivie de la limite de bande passante en kilobits par seconde, par exemple : scp -r -l 1000 user@remote_host:/path/to/remote/folder /home/user/Desktop/. Une autre option utile est le -C flag, qui permet la compression, accélérant potentiellement le transfert de fichiers volumineux.

La sécurité est un autre aspect critique à prendre en compte lors de l'utilisation scp. Alors que scp utilise intrinsèquement SSH pour les transferts sécurisés, vous pouvez prendre des mesures supplémentaires pour améliorer la sécurité. Par exemple, l’utilisation de clés SSH pour l’authentification au lieu de mots de passe peut améliorer considérablement la sécurité et la commodité. De plus, vous pouvez spécifier un autre port SSH à l'aide de l'option -P option si votre serveur n'utilise pas le port par défaut 22. Par exemple, scp -P 2222 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/ vous permet de vous connecter à un serveur exécutant SSH sur le port 2222.

Questions et réponses fréquemment posées sur SCP

  1. Comment copier un fichier du local vers le distant à l’aide de SCP ?
  2. Vous pouvez utiliser scp local_file user@remote_host:/path/to/remote/directory.
  3. Comment puis-je vérifier la progression du transfert SCP ?
  4. Utilisez le -v option pour activer le mode détaillé : scp -v -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  5. Puis-je conserver les attributs du fichier lors de l’utilisation de SCP ?
  6. Oui, utilisez le -p option pour conserver les heures de modification, les heures d'accès et les modes : scp -p -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  7. Comment utiliser SCP avec une autre clé SSH ?
  8. Spécifiez la clé SSH avec le -i option: scp -i /path/to/key -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  9. Comment gérer les transferts de fichiers volumineux avec SCP ?
  10. Utilisez le -C option de compression et le -l option pour limiter la bande passante : scp -C -l 1000 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  11. Comment transférer des fichiers à l’aide de SCP via un autre port SSH ?
  12. Utilisez le -P option pour spécifier le port : scp -P 2222 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  13. SCP peut-il gérer les liens symboliques ?
  14. Oui le -r L'option copiera les liens symboliques ainsi que les fichiers et répertoires.
  15. Que se passe-t-il si un transfert SCP est interrompu ?
  16. Réexécutez le scp commande pour reprendre le transfert ; il ignorera les fichiers déjà copiés.
  17. Comment utiliser SCP avec un mot de passe dans un script ?
  18. Il est recommandé d'utiliser plutôt des clés SSH, mais vous pouvez utiliser des outils comme sshpass pour l'authentification par mot de passe dans les scripts.

Réflexions finales sur l'utilisation de SCP

Comprendre comment utiliser SCP pour transférer des fichiers et des répertoires d'un serveur distant vers une machine locale peut considérablement améliorer l'efficacité de votre flux de travail. En maîtrisant à la fois les commandes de base et les techniques avancées, vous pouvez garantir des transferts de données sécurisés et efficaces. Que vous copiez des fichiers uniques ou des répertoires entiers, automatisez des tâches avec des scripts ou utilisez Python pour des opérations plus complexes, SCP reste un outil polyvalent et puissant pour vos besoins de gestion de données.