web-dev-qa-db-fra.com

Comment copier (ou déplacer) des fichiers d'une machine distante vers une machine locale?

Je SSH passe en tunnel de ma machine Ubuntu locale vers une machine Ubuntu distante et je veux copier/déplacer des fichiers de la Ubuntu distante vers la machine locale.

J'ai besoin de faire cela depuis la session SSH (c'est-à-dire depuis Ubuntu distant).

Ceux-ci n'ont pas fonctionné:

scp [remote-source] [local-destination] # Which is actually:
scp /home/user/files_to_depart/file1.txt /home/user/files_that_arrived/file1.txt

Comment cela peut-il être fait autrement?

6
JohnDoea

La réponse de nullmeta est tout à fait valide, et peut-être que nullmeta le modifiera pour fournir la clarification que vous recherchez. Je publie une solution distincte pour tenir compte de la situation dans laquelle il peut être difficile, en raison de la structure du réseau (pare-feu NAT), de simplement réintégrer SSH dans le système local.

Supposons que vous avez deux ordinateurs, ComputerA et ComputerB. ComputerA est votre poste de travail local. ComputerB est une machine distante à laquelle vous pouvez accéder via ssh.

Scénario 1: Si ComputerA n'est pas derrière un pare-feu NAT

C'est une solution Swift simple, combinant scp et ssh (scp effectue une copie sécurisée à l'aide des protocoles ssh). Vous devez avoir un serveur SSH (et un client) installé aux deux extrémités (ordinateurA et ordinateurB).

Pour utiliser cette solution, exécutez à partir de ComputerB:

scp /path/to/file/on/ComputerB ComputerAUser@ComputerA:/path/to/dump/file/on/ComputerA

Scénario 2: Si ComputerA est derrière un pare-feu NAT

Dans ce scénario, vous devrez généralement configurer le transfert de port dans le pare-feu NAT. Cependant, vous n’avez peut-être pas toujours accès à ce type de changement. Dans ce cas, vous pouvez configurer votre tunnel SSH à partir de OrdinateurA -> OrdinateurB, de manière à ce qu'il puisse également tunneler des connexions inversées.

Lors de l'établissement de la connexion ssh ComputerA -> ComputerB, utilisez l'option -R de la manière suivante. ssh ComputerBUser@ComputerB -R 2222:localhost:22ComputerBUser est le nom d'utilisateur du compte sur ComputerB authentifié et 2222 est un port libre sur ComputerB. Nous utiliserons ce port pour inverser le tunnel vers ComputerA à partir de ComputerB.

Maintenant depuis ComputerB , vous pouvez émettre la commande scp de la manière suivante pour copier des fichiers depuis ComputerB -> ComputerA où ComputerAUser est votre nom d'utilisateur sur ComputerA:

scp -P 2222 /path/to/file/on/ComputerB ComputerAUser@localhost:/path/to/drop/file/on/computerA

Qu'est-ce qu'il se passe ici? Il semble que nous disons simplement à ComputerB de renvoyer le fichier à lui-même, car nous passons localhost au lieu de ComputerA. Nous demandons bien à scp de renvoyer le fichier à ComputerB, mais au port 2222. Toutes les connexions au port 2222 sur ComputerB sont transférées sur le port 22 (port ssh par défaut) sur ComputerA. Ainsi, en faisant le tunnel en arrière sur la connexion ssh existante, peu importe que ComputerA soit derrière un pare-feu NAT.


Scénario 3: effectuez la copie de fichier à partir de ComputerA

Ou plutôt que d'essayer de le faire depuis ComputerB, vous pouvez simplement exécuter la commande scp depuis ComputerA.

scp ComputerBUser@ComputerB:/path/to/file/on/ComputerB /path/to/dump/file/on/ComputerA
9
b_laoshi

Si vous avez besoin d’un moyen simple de parcourir le système de fichiers d’une machine distante et de copier certains fichiers sur la machine locale (et inversement), vous pouvez utiliser SSHFS .

Description

  • De man sshfs :

    SSHFS (Secure Shell FileSystem) est un système de fichiers pour Linux (et d'autres systèmes d'exploitation à implémentation Fuse) capable de fonctionner sur des fichiers distants. ordinateur en utilisant simplement un login Shell sécurisé sur l’ordinateur distant. Sur l'ordinateur local sur lequel le SSHFS est monté, l'implémentation utilise le module de noyau Fuse (Filesystem in Userspace). L’effet pratique en est que l’utilisateur final peut interagir de manière transparente avec des fichiers distants étant servis de manière sécurisée sur SSH, comme s’il s’agissait de fichiers locaux sur son ordinateur. Sur l'ordinateur distant, le sous-système SFTP de SSH est utilisé.

  • De apt show sshfs:

    sshfs est un client de système de fichiers basé sur le protocole de transfert de fichiers SSH. Comme la plupart des serveurs SSH prennent déjà en charge ce protocole, il est très facile à configurer: c’est-à-dire qu’il n’ya rien à faire côté serveur. Du côté client, monter le système de fichiers est aussi simple que de se connecter au serveur avec ssh.

Installation

Sudo apt install sshfs

Contrairement à ce guide Je n'ai rien fait d'autre sur mon Ubuntu 16.04. Il n'y a pas de groupe d'utilisateurs Fuse.

Utilisation

  1. Créez un répertoire de montage approprié, par exemple:

    mkdir ~/sshfs-mount-point
    
  2. Monter un chemin distant :

    • Montez un chemin distant lorsque vous utilisez les paramètres ssh par défaut:

      sshfs user@IP:/remote/path ~/sshfs-mount-point
      
    • Montez un chemin distant lorsque vous utilisez des paramètres ssh personnalisés:

      sshfs -o IdentityFile=/path/to/id_rsa,port=2222 user@hostname-or-IP:/remote/path ~/sshfs-mount-point
      
    • Montez un chemin distant lorsque vous avez correctement configuré le fichier ~/.ssh/config:

      sshfs hostname:/remote/path ~/sshfs-mount-point
      
  3. Démontez le chemin distant . Il y a deux manières:

    • fusermount -u ~/sshfs-mount-point

    • Sudo umount ~/sshfs-mount-point

Utilisation selon la question

  • Pendant que vous êtes ssh connecté de machine A à machine B, et vous êtes capable d’établir une connexion SSH à partir de B à A. Vous pouvez utiliser l’une des méthodes ci-dessus pour monter un dossier à partir de A sur B. Ensuite, utilisez cp , rsync ou mc pour copier vos fichiers.

  • Pendant que vous êtes connecté à SSH de machine A à machine B, et vous êtes dans l’impossibilité d’établir une connexion SSH à partir de B à A. Vous pouvez créer un dossier dédié dans la machine B et copier vos fichiers dans ce dossier. Montez ce dossier sur la machine A et déplacez ces fichiers où vous voulez. Vous pouvez définir cronjob ou script bash qui gère cette tâche.

3
pa4080

Sans être dans une session SSH, vous voudriez utiliser

scp user@remotehost:/file/to/copy /local/destination

Si sshd est en cours d’exécution sur votre ordinateur local et que le port est ouvert, vous pouvez utiliser la session ssh.

scp /remote/file user@localmachine:/destination/file

Ce lien comporte des solutions de contournement https://unix.stackexchange.com/questions/2857/ssh-easily-copy-file-to-local-system

Edit: Je m'excuse pour toute confusion, le moyen le plus simple et le plus efficace d'ouvrir un deuxième terminal et d'exécuter la première commande scp que j'ai mentionnée.

1
nullmeta

Pour déplacer des fichiers d’un ordinateur à l’autre sur un réseau, vous utilisez l’utilitaire scp (scp signifie "copie sécurisée"). ssh est uniquement utilisé pour l’accès à la connexion à distance.

Comme vous vous êtes déjà connecté avec succès à un autre ordinateur de votre réseau, vous pouvez simplement copier vos fichiers sur votre ordinateur local à partir de cet emplacement, mais vous devrez exécuter un désamon ssh sur votre ordinateur local. Alors, installez-le d'abord:

$ Sudo apt-get install openssh-server -y

Assurez-vous qu'il soit opérationnel (la lumière verte indique qu'il l'est):

$ systemctl status sshd

enter image description here

Placez tous les fichiers sur la machine distante que vous souhaitez copier sur votre ordinateur local dans un répertoire séparé. Ensuite, utilisez cette commande:

$ scp -r [DIRECTORY] [USER]@[IP_ADDRESS]:~/Downloads

-r signifie que le répertoire avec tout son contenu va être traité de manière récursive. En termes simples, cela signifie que c'est l'option que vous utiliserez chaque fois que vous souhaitez copier un répertoire contenant des fichiers. [DIRECTORY] est le chemin d'accès à ce répertoire. [USER] est l'utilisateur sur votre ordinateur local. [IP_ADDRESS] est l'adresse IP de cette machine. Le contenu après le : indique où vous voulez que vos fichiers soient sauvegardés sur votre ordinateur local. Dans ce cas, il s'agit du dossier Downloads.

Voici à quoi ce processus ressemble en réalité:

enter image description here

1
misha