Comment copier un fichier d'un serveur distant sur une machine locale?

239

Dans mon terminal shell, je ssh'ed dans un serveur distant, et je cddans le répertoire que je veux.

Maintenant dans ce répertoire, il y a un fichier appelé tableque je veux copier sur ma machine locale /home/me/Desktop.

Comment puis-je faire ceci?

J'ai essayé scp table /home/me/Desktopmais cela a donné une erreur sur aucun fichier ou répertoire.

Est-ce que quelqu'un sait comment faire ça?

oméga
la source
Si vous vous retrouvez souvent en train de copier avec scp, vous pouvez monter le répertoire distant dans votre navigateur de fichiers et le faire glisser. Sur mon hôte Ubuntu 15, il se trouve sous la barre de menus "Aller"> "Entrer le lieu"> [email protected]:/home/debian. Une autre solution consiste sshfsà monter le système de fichiers de la machine distante sur l'hôte. Mais cette configuration est un peu plus compliquée.
ConvexMartian
Donnez rsyncun essai. C'est génial à la fois pour les copies locales et à distance, vous donne la progression de la copie, etc. Un exemple
sakisk

Réponses:

384

La syntaxe pour scpest:

Si vous êtes sur l'ordinateur à partir duquel vous souhaitez envoyer le fichier à un ordinateur distant:

scp /file/to/send username@remote:/where/to/put

Ici, il remotepeut s'agir d'un nom de domaine complet ou d'une adresse IP.

D'autre part, si vous êtes sur l'ordinateur et souhaitez recevoir le fichier d'un ordinateur distant:

scp username@remote:/file/to/send /where/to/put

scp peut également envoyer des fichiers entre deux hôtes distants:

scp username@remote_1:/file/to/send username@remote_2:/where/to/put

Donc, la syntaxe de base est la suivante:

scp username@source:/location/to/file username@destination:/where/to/put

Vous pouvez lire man scppour avoir plus d'idées à ce sujet.

heemayl
la source
4
Et si je veux copier plusieurs fichiers? J'ai ajouté un espace et juste utilisé un autre /file/to/sendMerci pour votre réponse géniale!
camdixon
6
scp -rva copier récursivement.
Henry
Ce que je veux copier les fichiers du réseau sur ma VM ... comment obtenir la même chose avec scp
Sushivam
2
@heemayl +1 pour la bonne réponse. Pensé pour ajouter que dans le cas où il s'agit d'une connexion sécurisée (qui nécessite une authentification), vous pouvez utiliser ce qui suit (pour copier un fichier de local à distant): scp -i mykey.pem unfichier.txt [email protected] : / some / folder / in / remote
Guy Avraham
1
Utilisé scp -P 123pour spécifier un port personnalisé
aexl
14

Vous pouvez utiliser rsynccomme alternative. C’est principalement pour la synchronisation de fichiers .. mais vous pouvez aussi l’utiliser à cette fin.

rsync -avzh --stats --progress remoteuser@remoteip  localpath 

pour ajouter des options ssh:

rsync -e "ssh -P $port_value" remoteuser@remoteip  localpath

--progresset --statssont utiles pour l'affichage en temps réel du transfert.

fugitif
la source
8
scp username@ipaddress:pathtofile localsystempath

scp sadananad@ipaddress:/home/demo/public_html/myproject.tar.gz .

Si vous utilisez avec port:

scp -Pportnumber username@ipaddress:pathtofile localsystempath 

scp -P2233 sadananad@ipaddress:/home/demo/public_html/myproject.tar.gz .
Sadanand Kenganal
la source
Cela copiera le fichier dans le même répertoire distant.
Max Yudin
3

Si vous faites confiance à tout le monde tout à fait dans le réseau et vous pouvez connecter un port de la machine de destination directement, vous pouvez utiliser netcat: nc.

Disons que l'adresse IP de la machine de destination est 192.168.1.123

Sur la destination:

nc -l -p 7777 0.0.0.0 | tar zxvf - -C dest_dir

Vous pouvez choisir un autre port et vous lier également à une autre adresse IP de vos interfaces. 0.0.0.0 intercepte uniquement toutes les interfaces.

Sur le source:

tar zxcf - filename | nc 192.168.1.123 7777

IMHO, c'est le moyen le plus rapide possible d'envoyer un fichier d'un ordinateur à un autre en utilisant des réseaux numériques.

Les arguments et les options de ligne de commande peuvent légèrement varier entre les différentes versions de ncet tar, mais cela fonctionnera certainement avec les dernières distributions Linux.

onur güngör
la source
2

Sous Linux, pour copier un dossier et son contenu depuis le répertoire utilisateur (racine dans cet exemple) dans un dossier du répertoire utilisateur local, j'exécute cette commande sur la machine locale:

scp -r [email protected]: ~ / folderinremoteuserdir ~ / folderinlocaluserdir

Notez le ~ / que je semble souvent oublier

Petit cerveau
la source