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?
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:22
où ComputerBUser
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
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
Créez un répertoire de montage approprié, par exemple:
mkdir ~/sshfs-mount-point
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
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.
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.
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
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é: