Transfert de fichiers via SSH [fermé]

461

Je suis SSHing dans un serveur distant sur la ligne de commande et j'essaie de copier un répertoire sur ma machine locale avec la scpcommande. Cependant, le serveur distant renvoie ce message "d'utilisation":

[Stewart:console/ebooks/discostat] jmm% scp -p ./styles/
usage: scp [-1246BCEpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 [...] [[user@]host2:]file2
[Stewart:console/ebooks/discostat] jmm%

J'aimerais pouvoir transférer des fichiers dans les deux sens. D'après ce que j'ai lu, je pensais que la commande ci-dessus fonctionnerait pour le téléchargement et le scp -p [localpath] [remotepath]téléchargement?

homard binaire
la source

Réponses:

735

Vous avez besoin de scpquelque chose quelque part. Vous avez scp ./styles/, donc vous dites copie sécurisée ./styles/, mais pas où le copier.

Généralement, si vous voulez télécharger, cela ira:

# download: remote -> local
scp user@remote_host:remote_file local_file 

local_filepourrait en fait être un répertoire dans lequel placer le fichier dans lequel vous copiez. Pour télécharger, c'est l'inverse:

# upload: local -> remote
scp local_file user@remote_host:remote_file

Si vous souhaitez copier un répertoire entier, vous en aurez besoin -r. Pensez scpà comme cp, sauf que vous pouvez spécifier un fichier avec user@remote_host:fileainsi que des fichiers locaux.

Modifier: Comme indiqué dans un commentaire, si les noms d'utilisateur sur les hôtes local et distant sont identiques, l'utilisateur peut être omis lors de la spécification d'un fichier distant.

lemnisca
la source
2
Notez que si l'utilisateur est le même sur l'hôte distant et l'hôte local, le nom d'utilisateur peut être omis: scp hello.c myserver.net:~/projects/
strager
Oui, c'est vrai, je vais ajouter une note à ce sujet. J'ai inclus l'utilisateur parce qu'alors les exemples que j'ai donnés fonctionneront toujours. :)
lemnisca
Im avoir du mal à ce sujet .. est-ce correct. scp C: \ filename.txt server1 @ server2: home
Vincent
Veuillez ajouter une mise en forme en gras sur "donload" et "upload".
kursus
2
"naturellement" (je dis naturellement parce que je viens de perdre 15 minutes à ce sujet), vous ne devez pas être connecté à l'hôte distant lorsque vous tentez de "télécharger" vers local, car si vous exécutez le code à partir d'une instance distante, "local" être interprété comme le "distant", si vous voyez ce que je veux dire. Ne lancez donc pas ssh en premier.
PatrickT
164

Si vous copiez vers / depuis votre ordinateur de bureau, utilisez WinSCP ou si sous Linux, Nautilus prend en charge SCP via l'option Se connecter au serveur.

scp ne peut copier des fichiers que sur une machine exécutant sshd, vous devez donc exécuter le logiciel client sur la machine distante à partir de celui sur lequel vous exécutez scp.

Si vous copiez sur la ligne de commande, utilisez:

# copy from local machine to remote machine
scp localfile user@host:/path/to/whereyouwant/thefile

ou

# copy from remote machine to local machine
scp user@host:/path/to/remotefile localfile
JeeBee
la source
4
Tu es l'homme. J'ai déployé un blog en moins de 10 secondes sans aucune installation supplémentaire côté serveur!
PM
2
Cela a parfaitement fonctionné. J'ai utilisé msysgit en cmd car il a à la fois scp et ssh.
Ibn Saeed
3
Cela a parfaitement fonctionné. J'ai utilisé scp * user @ host: / path / to / where
Bastin Robin
3
Cela devrait être la meilleure réponse.
gsamaras
3
Merci pour la suggestion WinSCP. Bien plus facile que d'essayer d'écrire toutes ces commandes manuellement ...
Brian Leishman
23

Vous devez spécifier à la fois la source et la destination, et si vous souhaitez copier des répertoires, vous devez regarder l'option -r.

Donc, pour copier récursivement / home / user / quoi que ce soit du serveur distant vers votre répertoire actuel:

scp -pr user@remoteserver:whatever .
Ken
la source
19

Non, vous avez toujours besoin de la scp [from] [to]façon dont vous copiez

La différence est que vous devez scp -p server:serverpath localpath

Gareth
la source
8
quel est le but de -p?
Qinjie
1
De man scp: préserve les heures de modification, les temps d'accès et les modes du fichier d'origine.
pjmil
4
Pour être clair, cela -pn'est inclus ici que parce que le PO a inclus le drapeau dans sa question d'origine. Ce n'est en aucune façon pertinent pour la réponse
Gareth