3102 votes

Comment copier un dossier de distant à local en utilisant scp ?

Comment copier un dossier de l'hôte distant vers l'hôte local à l'aide de la fonction scp ?

J'utilise ssh pour se connecter à mon serveur.
Ensuite, je voudrais copier le dossier distant foo au niveau local /home/user/Desktop .

Comment puis-je y parvenir ?

92 votes

La question de l'OP était de savoir s'il était possible de copier un fichier d'un hôte distant vers un hôte local. tout en étant connecté en ssh à l'hôte distant . Je ne comprends pas pourquoi aucune réponse n'a répondu correctement à sa question.

8 votes

La prémisse de la question est incorrecte. L'idée est la suivante : une fois connecté à ssh, comment déplacer les fichiers de la machine connectée vers le client qui est connecté. Cependant, scp n'est pas au courant de la connexion ssh et ne peut pas l'utiliser. Il établit ses propres connexions. La solution la plus simple est donc de créer une nouvelle fenêtre de terminal sur le poste de travail local, et d'exécuter scp qui transfère les fichiers du serveur distant vers la machine locale. Par exemple, scp -i key user@remote:/remote-dir/remote-file /local-dir/local-file

0 votes

Utilice mc : TAB , cd sh://USER@HOST , utilisez les raccourcis mc, cd une fois terminé.

5655voto

Gryphius Points 13111
scp -r user@your.server.example.com:/path/to/foo /home/user/Desktop/

En n'incluant pas la queue '/' à la fin de foo, vous copiez le répertoire lui-même (y compris son contenu), plutôt que seulement le contenu du répertoire.

En man scp (Voir manuel en ligne )

-r Copier récursivement des répertoires entiers

1749 votes

Je cherche sur Google à chaque fois. Bande dessinée connexe : xkcd.com/1168

0 votes

@Gryphius Je continue à obtenir une erreur de permission refusée (publickey) en utilisant ceci. Comment puis-je résoudre ce problème ?

4 votes

@john-k, plusieurs raisons possibles (scp non activé sur le serveur, clé publique non autorisée, problème de permission de fichier, ...). vérifiez d'abord si ssh standard fonctionne avec votre clé. consultez les questions existantes sur ce sujet sur sof/serverfault et si cela ne vous aide pas, posez-en une nouvelle sur serverfault avec les sorties de débogage de ssh / scp.

339voto

Pour utiliser toute la puissance de scp vous devez passer par les étapes suivantes :

  1. Autorisation de la clé publique
  2. Créer des alias ssh

Alors, par exemple, si vous avez ceci ~/.ssh/config :

Host test
    User testuser
    HostName test-site.com
    Port 22022

Host prod
    User produser
    HostName production-site.com
    Port 22022

vous vous épargnerez la saisie d'un mot de passe et simplifierez scp une syntaxe comme celle-ci :

scp -r prod:/path/foo /home/user/Desktop   # copy to local
scp -r prod:/path/foo test:/tmp            # copy from remote prod to remote test

De plus, vous serez en mesure d'utiliser la complétion de chemin à distance :

scp test:/var/log/  # press tab twice
Display all 151 possibilities? (y or n)

Mise à jour :

Pour permettre la complétion de bash à distance, vous devez avoir bash-shell sur les deux sites <source> y <target> hôtes, et une complétion bash fonctionnant correctement. Pour plus d'informations, voir les questions connexes :

Comment activer l'autocomplétion pour les chemins distants en utilisant scp ?
Compléter l'onglet du nom de fichier SCP

15 votes

Je ne connaissais pas le fichier de configuration, c'est génial !

0 votes

La complétion de l'onglet n'a aucun sens, elle se fait à partir de l'hôte local pour moi.

16 votes

@b.long La question est "Comment copier le dossier distant foo sur le bureau local". Ma réponse est la suivante "scp -r prod:/path/foo /home/user/Desktop" . J'espère que vous pourrez voir les relations.

53voto

Manish Shrivastava Points 4380

Ce que j'utilise toujours est :

scp -r username@IP:/path/to/server/source/folder/  .

. (point) : cela signifie current folder . donc copier du serveur et coller ici seulement.

IP : peut être une adresse IP comme 125.55.41.311 ou il peut être accueilli comme ns1.mysite.com .

9 votes

Merci de souligner que . fait référence au répertoire courant !

41voto

justi Points 424

Il est préférable de compresser d'abord le catalogue sur le serveur distant :

tar czfP backup.tar.gz /path/to/catalog

Ensuite, téléchargez à distance :

scp user@your.server.example.com:/path/to/backup.tar.gz .

A la fin, extrayez les fichiers :

tar -xzvf backup.tar.gz

11 votes

La notion de "meilleur" dépend fortement des données que vous transférez et de l'effort que représente le fait de se connecter au serveur pour effectuer la compression/décompression. Et : vous pouvez ajouter la compression à scp avec l'option -C comme scp -C a@b:bigfile . .

5 votes

Cela me rappelle le commentaire fait par @cptloop ! :D xkcd.com/1168

1 votes

Vous m'avez épargné une recherche supplémentaire sur Internet.

22voto

dimuthu Points 98

Et si vous avez de sacrés fichiers à télécharger à partir d'un emplacement distant et si vous ne vous souciez pas trop de la sécurité, essayez de changer le cryptage par défaut de scp (Triple-DES) par quelque chose comme 'blowfish'.

Cela permettra de réduire considérablement le temps de copie des fichiers.

scp -c blowfish -r user@your.server.example.com:/path/to/foo /home/user/Desktop/

2 votes

Selon cet article de blog vous obtenez des performances encore meilleures avec arcfour à la place de blowfish mais il présente des failles de sécurité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X