Choisissez scp, sftp ou rsync pour transférer des fichiers entre un système local Linux ou macOS et une instance ECS Linux via SSH.
Choisir un outil de transfert
Sélectionnez l'outil le mieux adapté à votre scénario.
scp : Transferts rapides de fichiers uniques. Syntaxe simple.
sftp : Session interactive similaire au FTP permettant de parcourir, supprimer et renommer des fichiers.
rsync : Synchronisation de répertoires, sauvegardes ou gestion de nombreux petits fichiers. L'algorithme incrémentiel ne transfère que les différences.
Réseaux instables : Utilisez la reprise de transfert avec
rsyncousftppour les fichiers volumineux.
Comparaison technique détaillée :
Procédure
Avant de commencer
Effectuez ces vérifications avant de transférer des fichiers.
-
Récupérez l'adresse IP publique de l'instance
L'instance doit avoir la bande passante publique activée. Notez l'adresse IP publique depuis la page Instance list de la console ECS.
-
Configurez les règles du groupe de sécurité
Ces outils utilisent SSH (port 22 par défaut). Assurez-vous que le groupe de sécurité autorise le trafic TCP entrant sur ce port depuis votre adresse IP locale.
Action : Allow
Protocol Type : Custom TCP
Port Range : 22/22 (ou votre port SSH personnalisé)
-
Source : Définissez-la sur votre adresse IP publique locale pour des raisons de sécurité.
Obtenez votre adresse IP en exécutant
curl ifconfig.meoucurl ip.sbdans votre terminal local.
-
Vérifiez le pare-feu interne
Le pare-feu du système d'exploitation (tel que
firewalldouufw) peut également bloquer la connexion.Connectez-vous à l'instance et vérifiez l'état du pare-feu.
Si le pare-feu est actif, assurez-vous qu'il autorise SSH ou le port 22. Pour ouvrir un port ou un service, consultez la documentation de votre système d'exploitation.
Utiliser scp pour transférer des fichiers
Le protocole Secure Copy (scp) copie des fichiers et des répertoires entre un ordinateur local et un hôte distant.
Envoyer des fichiers ou des répertoires vers une instance
Envoyez un fichier ou un dossier vers votre instance. Un mot de passe vous sera demandé.
# Upload a single file to the instance
sudo scp <local_file_path> <instance_username>@<public_ip_address>:<remote_directory_path>
# Upload a local directory to the instance
sudo scp -r <local_directory_path> <instance_username>@<public_ip_address>:<remote_directory_path>
Exemple :
Envoyez /opt/test.txt vers /home/ecs-user/ sur une instance dont l'IP publique est 1xx.xxx.xxx.121 :
sudo scp /opt/test.txt ecs-user@1xx.xxx.xxx.121:/home/ecs-user/
Télécharger des fichiers ou des répertoires depuis une instance
Téléchargez un fichier depuis votre instance. Un mot de passe vous sera demandé.
Note :scpest inefficace pour de nombreux petits fichiers. Archivez-les dans un fichier.tar.gzavant le transfert, ou utilisezrsync.
# Download a single file to your local machine
sudo scp <instance_username>@<public_ip_address>:<remote_file_path> <local_directory_path>
# Download a directory from the instance to your local machine
sudo scp -r <instance_username>@<public_ip_address>:<remote_directory_path> <local_directory_path>
Exemple :
Téléchargez /home/ecs-user/test.txt depuis une instance dont l'IP publique est 1xx.xxx.xxx.121 vers le répertoire local /opt/ :
sudo scp ecs-user@1xx.xxx.xxx.121:/home/ecs-user/test.txt /opt/
Utiliser sftp pour les transferts de fichiers interactifs
Le protocole SSH File Transfer Protocol (SFTP) démarre une session interactive pour la gestion des fichiers sur un serveur distant.
Se connecter à l'instance
Établissez une connexion sftp. Une fois connecté, l'invite devient sftp>.
sudo sftp <instance_username>@<public_ip_address>
Envoyer des fichiers ou des répertoires vers une instance
# Upload a single file
sftp> put <local_file_path> <remote_directory_path>
# Upload an entire directory
sftp> put -r <local_directory_path> <remote_directory_path>
Exemples :
-
Envoyez
/opt/test.txtvers/home/ecs-user/sur l'instance :sftp> put /opt/test.txt /home/ecs-user -
Pour envoyer le répertoire local
/opt/test/vers le répertoire/home/ecs-user/sur l'instance :sftp> put -r /opt/test/ /home/ecs-user/
Télécharger des fichiers ou des répertoires entiers depuis une instance
# Download a single file
sftp> get <remote_file_path> <local_directory_path>
# Download an entire directory
sftp> get -r <remote_directory_path> <local_directory_path>
Exemples :
-
Pour télécharger le fichier
/home/ecs-user/test.txtdepuis l'instance vers votre répertoire local/opt:sftp> get /home/ecs-user/test.txt /opt -
Pour télécharger le répertoire
/home/ecs-user/test/depuis l'instance vers votre répertoire local/opt:sftp> get -r /home/ecs-user/test/ /opt
Reprendre un transfert
Si le transfert d'un fichier volumineux est interrompu, vous pouvez utiliser les commandes reput (envoi) et reget (téléchargement) pour reprendre le transfert là où il s'est arrêté.
# Resume an upload
sftp> reput <local_file_path> <remote_file_path>
# Resume a download
sftp> reget <remote_file_path> <local_file_path>
Note : La reprise de transfert SFTP n'est efficace que pour les fichiers uniques. Si le transfert d'un répertoire est interrompu, nous vous recommandons de quitter SFTP et d'utiliser rsync pour une synchronisation efficace.
Déconnecter la session
Lorsque vous avez terminé vos tâches, utilisez la commande quit ou bye pour quitter la session sftp.
Utiliser rsync pour la synchronisation de fichiers et de répertoires
rsync est idéal pour les transferts à grande échelle, incrémentiels ou répétitifs.
Installer l'outil
Assurez-vous que rsync est installé à la fois sur votre machine locale et sur l'instance.
# On CentOS / Alibaba Cloud Linux
sudo yum install -y rsync
# On Debian / Ubuntu
sudo apt-get update && sudo apt-get install -y rsync
Options courantes
L'utilisation standard de rsync inclut souvent les options -avz :
-a(archive) : Mode archive, équivalent à-rlptgoD. Il synchronise de manière récursive et préserve tous les attributs de fichier, tels que les permissions et les horodatages.-v(verbose) : Affiche des informations détaillées sur le processus de transfert.-z(compress) : Pour économiser de la bande passante, il compresse les données pendant le transfert. Toutefois, sur les liaisons à haut débit, la compression CPU peut devenir un goulot d'étranglement, et omettre-zpeut être plus rapide.
Options courantes pour les environnements de production
Envoyer ou synchroniser des fichiers et des répertoires vers une instance ECS
Pour envoyer des fichiers vers une instance, exécutez la commande suivante depuis votre machine locale. Vous serez invité à saisir votre mot de passe.
sudo rsync -avz -e ssh <local_path> <logon_username>@<public_ip_address>:<remote_path>
Exemples :
-
Pour envoyer le fichier
/opt/test.txtvers le répertoire/home/ecs-userd'une instance dont l'adresse IP publique est1xx.xxx.xxx.121:sudo rsync -avz -e ssh /opt/test.txt ecs-user@1xx.xxx.xxx.121:/home/ecs-user -
Pour synchroniser le répertoire local
/opt/test/avec le répertoire/home/ecs-user/testsur l'instance dont l'adresse IP publique est1xx.xxx.xxx.121:sudo rsync -avz -e ssh /opt/test/ ecs-user@1xx.xxx.xxx.121:/home/ecs-user/test
Télécharger ou synchroniser des fichiers et des répertoires depuis une instance
Pour télécharger des fichiers depuis une instance vers votre machine locale, exécutez la commande suivante localement. Vous serez invité à saisir votre mot de passe.
sudo rsync -avz -e ssh <instance_username>@<public_ip_address>:<remote_path> <local_path>
Application en production
-
Gérer un grand nombre de petits fichiers : archiver d'abord, puis transférer
Le transfert d'un répertoire contenant des milliers de petits fichiers est inefficace avec l'un de ces outils en raison de la surcharge de connexion et de métadonnées pour chaque fichier. La bonne pratique consiste à archiver et compresser le répertoire en un seul fichier (par exemple,
.tar.gz) sur la machine source, à transférer l'archive, puis à l'extraire sur la machine de destination. -
Simplifier les commandes avec un fichier de configuration SSH
Vous pouvez simplifier les commandes de connexion et de transfert en créant un alias pour votre instance ECS (par exemple,
my-prod-server) dans votre fichier local~/.ssh/config.# Add the following to ~/.ssh/config Host my-prod-server HostName 118.178.x.x User ecs-user Port 22 IdentityFile ~/.ssh/id_rsa_aliyun ServerAliveInterval 60Cela simplifie vos commandes
scpetrsync:# Original command: sudo scp -i ~/.ssh/id_rsa_aliyun local.txt ecs-user@118.178.x.x:/remote/ # New command: sudo scp local.txt my-prod-server:/remote/ # Original command: sudo rsync -avz -e "ssh -i ~/.ssh/id_rsa_aliyun" local_dir/ ecs-user@118.178.x.x:/remote_dir/ # New command: sudo rsync -avz local_dir/ my-prod-server:/remote_dir/
FAQ
-
Comment transférer des fichiers en utilisant un port spécifique ?
scp : Pour spécifier le port, utilisez l'option
-P(majuscule) :scp -P <port_number> ...sftp : Pour spécifier le port, utilisez l'option
-P(majuscule) :sftp -P <port_number> ...rsync : Pour spécifier le port pour SSH, modifiez l'option
-e:rsync -avz -e "ssh -p <port_number>" ...
-
Comment spécifier un fichier de clé privée lors de la connexion à une instance avec une paire de clés ?
scp : Pour spécifier le fichier de clé privée, utilisez l'option
-i:scp -i <path_to_private_key> ...sftp : Pour spécifier le fichier de clé privée, utilisez l'option
-oIdentityFile:sftp -oIdentityFile=<path_to_private_key> ...rsync : Pour spécifier la clé privée pour SSH, modifiez l'option
-e:rsync -e "ssh -i <path_to_private_key>" ...
Références
Pour sauvegarder les fichiers importants que vous envoyez vers une instance ECS, consultez Créer manuellement un snapshot.
Si vous devez envoyer des fichiers vers une instance Windows, vous pouvez utiliser d'autres méthodes de transfert de fichiers. Consultez Sélectionner une méthode de transfert de fichiers.
Pour transférer des fichiers de Windows vers une instance Linux, utilisez un outil tel que WinSCP. Consultez Transférer des fichiers vers une instance Linux avec WinSCP.