Comment copier un dossier de distant à local en utilisant scp? [fermé]

2697

Comment copier un dossier d'un hôte distant vers un hôte local en utilisant scp?

j'utilise ssh pour connecter à mon serveur.
Ensuite, je voudrais copier le dossier distant foosur local /home/user/Desktop.

Comment puis-je y parvenir?

Slasengger
la source
61
La question de l'OP était de savoir s'il est possible de copier un fichier d'un hôte distant vers un hôte local tout en étant transféré vers un hôte distant . Je ne sais pas pourquoi aucune réponse unique n'a correctement répondu à sa question.
JeffDror
3
La prémisse de la question est incorrecte. L'idée est, 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 et ne peut pas utiliser la connexion ssh. Il établit ses propres connexions. La solution simple consiste donc à créer une nouvelle fenêtre de terminal sur le poste de travail local et à 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
jeffmcneill
12
La question peut être hors sujet, mais c'est aussi le post le mieux classé sur Google. Le verrouiller signifie que personne ne peut le mettre à jour pour fournir une meilleure solution.
Alex Harvey
3
J'ai récemment posé une question similaire "un peu plus en profondeur" concernant les lignes de commande d'un autre outil sur SuperUser, et elle a été déplacée par les mods là-bas vers StackOverflow. Quoi qu'il en soit, je suis d'accord avec l'affirmation des mods: pouvons-nous déplacer ceci vers SuperUser s'il vous plaît et le déverrouiller et avoir plus de réponses à venir?
Nikhil VJ
3
En général, toute la réaction "hors sujet" sur stackoverflow est le plus gros défaut de la plate-forme. Martinets trop zélés.
AdamC

Réponses:

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

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

De man scp(Voir le manuel en ligne )

-r Copie récursive de répertoires entiers

Gryphius
la source
1412
Je google ça à chaque fois. Bande dessinée connexe: xkcd.com/1168
cptloop
10
J'ai trouvé deux bons à savoir: l' -Cindicateur ajoute la compression et l' -cindicateur vous permet de passer dans d'autres types de chiffrement pour de meilleures performances, comme on scp -c blowfish a@b:something . le voit dans la réponse de dimuthu
Automatico
79
utilisez -p pour conserver les temps de modification des fichiers, les permissions, etc! scp -pr user @ ...
Ber
27
Cette réponse manque d'explications importantes. Allez-vous vous retrouver avec Desktop/fooou allez-vous avoir Desktop/allcontentsofFooGoherescp semble parfois bizarre pour moi cela fait une chose puis une autre
Toskan
7
@Toskan avec scp -r [email protected]:/path/to/foo /home/user/Desktop/vous devrait se retrouver avec Desktop/foo. Avec scp -r [email protected]:/path/to/foo/. /home/user/Desktop/ vous vous retrouverez avec le contenu de fooin Desktopet tous les sous-répertoires de foojonché sousDesktop
Ioannis
307

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

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

Ensuite, par exemple si vous avez ce ~ / .ssh / config :

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

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

vous vous sauverez de la saisie du mot de passe et simplifierez la syntaxe scp comme ceci:

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 pourrez utiliser l'achèvement de chemin à distance:

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

Mise à jour:

Pour activer bash-completion à distance vous devez avoir-shell bash sur les deux <source>et <target>hôtes, et bash-completion fonctionne correctement. Pour plus d'informations, consultez les questions connexes:

Comment activer la saisie semi-automatique pour les chemins distants lors de l'utilisation de scp?
Achèvement de l'onglet du nom de fichier SCP

Alexander Yancharuk
la source
12
Je ne connaissais pas le fichier de configuration, c'est génial!
dmastylo
L'achèvement de l'onglet est un non-sens, se termine simplement à partir de l'hôte local pour moi.
Bernhard
14
@ b.long La question est "Comment copier le dossier distant foo sur le bureau local". Ma réponse est "scp -r prod: / path / foo / home / user / Desktop" . J'espère que vous pourrez voir des relations.
Alexander Yancharuk
2
@Bernhard Pour moi, c'était évident parce que j'utilise bash-shell. Merci de m'avoir indiqué ça! Réponse mise à jour.
Alexander Yancharuk
1
@Alexander Yancharuk: Merci pour la réponse, c'est plus détaillé que de couvrir uniquement la syntaxe.
Gladiator
217

Pour tout copier d'un emplacement local vers un emplacement distant (téléchargement)

scp -r /path/from/destination username@hostname:/path/to/destination

Pour tout copier d' un emplacement distant vers un emplacement local (téléchargement)

scp -r username@hostname:/path/from/destination /path/to/destination

Port personnalisé où xxxxest le numéro de port personnalisé

 scp -r -P xxxx username@hostname:/path/from/destination /path/to/destination

Copier sur le répertoire actuel de Remote vers Local

scp -r username@hostname:/path/from/file .

Aidez-moi:

  1. -r Copiez récursivement tous les répertoires et fichiers
  2. Toujours utiliser l'emplacement complet à partir de /, obtenir l'emplacement complet parpwd
  3. scp remplacera tous les fichiers existants
  4. hostname sera le nom d'hôte ou l'adresse IP
  5. si un port personnalisé est nécessaire (en plus du port 22), utilisez -P portnumber
  6. . (point) - cela signifie le répertoire de travail actuel, alors téléchargez / copiez à partir du serveur et collez ici uniquement.

Remarque: Parfois, le port personnalisé ne fonctionne pas car le port n'est pas autorisé dans le pare-feu, alors assurez-vous que le port personnalisé est autorisé dans le pare-feu pour la connexion entrante et sortante

Shiv Singh
la source
1
Il semble (au moins dans les versions récentes de Raspbian Jessie et Ubuntu) que scp utilise -P (P majuscule) pour le port, tandis que (curieusement) ssh utilise -p (minuscule).
Adam Plocher
-p est réservé pour conserver "les heures de modification, les temps d'accès et les modes du fichier d'origine". Donc, si vous l'utilisez pour le port, cela ne fonctionne probablement pas ;-) À moins que vous n'ayez une version différente qui utilise le p minuscule différemment.
Adam Plocher
Avec ssh, oui. Pas avec scp (je suppose).
Adam Plocher
Que dois-je mettre si le répertoire contient un espace?
Brethlosze
@hyprfrcb Utilisez pwdpour obtenir l'emplacement et l'utiliser
Shiv Singh
48

Ce que j'utilise toujours c'est:

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

. (point) : cela signifie current folder. alors copiez depuis le serveur et collez ici uniquement.

IP : il peut s'agir d'une adresse IP 125.55.41.311ou d'un hôte ns1.mysite.com.

Manish Shrivastava
la source
9
Merci d'avoir signalé que cela .fait référence au répertoire actuel!
ericmjl
35

Mieux vaut d'abord compresser le catalogue sur le serveur distant:

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

Deuxièmement, téléchargez à distance:

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

À la fin, extrayez les fichiers:

tar -xzvf backup.tar.gz
justi
la source
10
"Mieux" dépend fortement des données que vous transférez et de l'effort qu'il faut faire au serveur pour faire du zipper / décompresser. Et: vous pouvez ajouter une compression à scp avec le -Cdrapeau, comme scp -C a@b:bigfile ..
Automatico
4
Cela me rappelle le commentaire de @cptloop! : D xkcd.com/1168
GoodSp33d
22

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

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

scp -c blowfish -r user@your.server.example.com:/path/to/foo /home/user/Desktop/
dimuthu
la source
2
Selon ce blog poster que vous obtenez une performance encore meilleure avec arcfourau lieu de blowfish, mais il a des failles de sécurité.
Automatico
20

Scénario typique,

scp -r -P port username@ip:/path-to-folder  .

expliqué avec un échantillon,

scp -r -P 27000 [email protected]:/tmp/hotel_dump .

où,

port = 27000
username = "abc" , remote server username
path-to-folder = tmp/hotel_dump
. = current local directory
Arun G
la source
Merci pour la réponse. -P pour un port SSH spécifique m'a été utile.
redoff
19

Accédez à Fichiers sur votre barre d'outils de l'unité

entrez la description de l'image ici

Appuyez sur Ctrl + l et écrivez [email protected]

Le 192.168.1.103 est l'hôte auquel vous souhaitez vous connecter.

Voici un exemple

entrez la description de l'image ici

Ronald
la source
12

La question était de savoir comment copier un dossier de distant vers local avec la scpcommande.

$ scp -r userRemote@remoteIp:/path/remoteDir /path/localDir

Mais voici la meilleure façon de le faire sftp- SSH File Transfer Protocol (également Secure File Transfer Protocol, ou SFTP) est un protocole réseau qui fournit un accès aux fichiers, un transfert de fichiers et une gestion de fichiers sur n'importe quel flux de données fiable (wikipedia).

$ sftp user_remote@remote_ip

sftp> cd /path/to/remoteDir

sftp> get -r remoteDir

Fetching /path/to/remoteDir to localDir 100% 398 0.4KB/s 00:00

Pour obtenir de l'aide sur la sftpcommande, tapez simplement helpou ?.

Fulvio
la source
12

Si vous rencontrez "trop ​​d'échecs d'authentification" , spécifiez la clé SSH exacte que vous avez ajoutée à votre serveur svers severs:

scp -r -i /path/to/local/key user@remote.tld:/path/to/folder /your/local/target/dir
kaiser
la source
5

Je ne sais pas pourquoi mais j'ai dû utiliser le dossier local avant la directive du serveur source. pour le faire fonctionner

scp -r . root@888.888.888.888:/usr/share/nginx/www/example.org/
Salem
la source
1
En supposant que l'utilisateur avait des autorisations, pourriez-vous faire un chemin absolu sans utiliserroot@
Jonathan