scp entre deux serveurs n'appartenant pas au même réseau


13

Il y a deux serveurs auxquels je peux accéder avec 2 connexions VPN différentes. J'ai réussi à faire fonctionner les deux VPN en même temps sur ma machine (un peu de règles de routage).

Je veux faire un à scp <remote1>:some/file <remote2>:destination/folderpartir de mon terminal portable. Mais quand j'essaye ceci, la scpcommande qui est invoquée sur remote1 ne peut pas trouver remote2 car ils ne sont pas sur le même réseau. Est-il possible de forcer la scpcommande à passer par mon ordinateur portable en tant que routeur?

Si j'essaie avec Nautilus (se connecter au serveur, aux deux serveurs, puis copier-coller), cela fonctionne, mais j'aimerais le faire à partir d'un terminal.


C'est votre machine qui contacte les deux, remote1 et remote2 . Êtes-vous sûr que l'erreur est que remote1 ne peut pas accéder à remote2 ?
Jan

Oui, l'erreur est ssh: impossible de résoudre le nom d'hôte <remote2>: nom ou service
inconnu

Et si j'essaie d'utiliser l'adresse IP directement pour <remote2>, la connexion échoue après un certain temps (hangout).
Danduk82

Ensuite, je suppose que c'est votre machine qui ne peut pas se connecter à remote2 . Peut-être que les temps de connexion VPN sur ou est flakey ...
Jan

Non, cela fonctionne, même le DNS fonctionne. J'ai vraiment l'impression que la commande scp essaie d'exécuter la connexion entre remote1 et remote2 directement sur remote1 .
Danduk82

Réponses:


34

Les nouvelles versions de scp ont l'option -3

-3

Copies between two remote hosts are transferred through the local host. Without this option the data is copied directly between the two remote hosts

génial! Exactement ce dont j'avais besoin. Merci beaucoup
Danduk82

1
Super trouvaille, je ne savais pas ça!
Jan

9

Si vous avez besoin de plus de flexibilité scp -3, la plaine sshet les tuyaux sont amusants.

Cela revient à rediriger le flux sur la machine locale:

ssh sourceRemote 'cat /path/to/sourceFile' \
| ssh destinationRemote 'cat > /path/to/destinationFile'

Vous pouvez ensuite ajouter d'autres redirections de flux à tout moment, par exemple pour chaîner plusieurs machines intermédiaires, ou enregistrer une copie locale du fichier transféré lors de son routage.


2
Vous obtiendrez une belle barre de progression si la machine source a été pvinstallée et vous remplacez la première catpar elle.
liori

6

En développant la réponse de @ Anko, vous pouvez utiliser tarpour plusieurs fichiers:

ssh -q user@sourcehost 'cd /source/path; tar -czf - files...' | \
ssh -q user@desthost 'cd /dest/path; tar -xzf -'

La compression est entièrement facultative - vos données peuvent ne pas être très compressibles ou suffisamment volumineuses pour justifier la surcharge. Si votre version de tarne prend pas en charge le -zcommutateur, canalisez gzip -cet gzip -dcrespectivement.

PS: Méfiez-vous des versions tarqui ne suppriment pas les barres obliques principales lors de l'extraction (c'est-à-dire, écrivez dans les noms de chemin absolus si fournis).

Edit: -e nonen'est pas nécessaire avec les pipes, car un pseudo-terminal n'est pas alloué.


1
ssha un -Cindicateur pour activer la compression de flux. Selon la page man, il utilise le même algorithme que gzipsi. La page de manuel explique également utilement quand l'utiliser: "La compression est souhaitable sur les lignes de modem et autres connexions lentes, mais ne ralentira que les choses sur les réseaux rapides."
Anko

4
@Anko, le problème avec l'utilisation -Cici est que la machine locale devrait décompresser et recompresser les données. Dire tarde faire la compression signifie que les données compressées sont transmises directement dans le tuyau sans aucun traitement.
cjm
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.