web-dev-qa-db-fra.com

Transfert de fichiers sur SSH

Je suis SSH sur un serveur distant en ligne de commande et j'essaie de copier un répertoire sur ma machine locale à l'aide de la commande scp. Cependant, le serveur distant renvoie le message "usage" suivant:

[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 scp -p [localpath] [remotepath] pour le téléchargement?

440
Josh Maurice

Vous devez scp quelque chose quelque part. Vous avez scp ./styles/, vous indiquez donc une copie sécurisée ./styles/, mais vous ne savez 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_file pourrait en fait être un répertoire dans lequel vous placerez le fichier que 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 aurez besoin de -r. Pensez à scp comme à cp, sauf que vous pouvez spécifier un fichier avec user@remote_Host:file ainsi que des fichiers locaux uniquement.

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

704
lemnisca

Si vous effectuez une copie vers/à partir de votre ordinateur de bureau, utilisez WinSCP ou sous Linux, Nautilus prend en charge SCP via l’option Connexion au serveur.

scp ne pouvant copier que des fichiers sur une machine exécutant sshd, vous devez donc exécuter le logiciel client sur la machine distante à partir de celle sur laquelle 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
156
JeeBee

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

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

scp -pr user@remoteserver:whatever .
22
Ken

Non, vous devez toujours scp [from] [to] quelle que soit la manière dont vous copiez.

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

17
Gareth