SCP entre deux réseaux

12

J'ai besoin de transférer un fichier entre deux ordinateurs qui ne sont pas connectés au même réseau. J'ai un troisième ordinateur qui peut voir les deux réseaux via un VPN.

Depuis le troisième ordinateur, je peux faire:

scp root@firstcomputer:./file ./

Et terminez le transfert avec la phrase suivante:

scp ./file root@secondcomputer:./

Mais je ne peux pas le faire en une seule ligne, comme suit:

scp root@firstcomputer:./file root@secondcomputer:./

La réponse d'erreur est

ssh: connect to host secondcomputer port 22: No route to host
lost connection

Je me rends compte que c'est probablement parce que le premier ordinateur ne peut pas voir le deuxième ordinateur. Est-il possible de donner à SCP un paramètre qui traite du fait que la machine qui exécute le programme SCP est la seule qui peut voir les deux ordinateurs?

Soit dit en passant, le troisième ordinateur est un Mac avec Lion et le premier et le deuxième exécutent Debian.

JorgeO
la source

Réponses:

3

Vous devriez pouvoir utiliser un tunnel SSH.

En supposant que vous essayez de transférer un fichier d'un ordinateur distant ("distant") vers votre ordinateur local ("local"), établissez le tunnel via le troisième ordinateur ("passerelle") en tapant ceci sur votre ordinateur local:

ssh -fNL 12345:remote:22 gatewaylogin@gateway

Ensuite, vous pouvez exécuter un nombre illimité de commandes SCP sur ce tunnel (toujours en tapant sur votre ordinateur local):

scp -P 12345 remotelogin@localhost://path/to/remote/file /local/path/where/you/want/file

Je viens de tester cela sur mon réseau et cela a parfaitement fonctionné.

La méthode ci-dessus convient si le réseau distant est sécurisé, mais s'il ne l'est pas, vous devez établir un tunnel entre local et passerelle, et un autre tunnel entre passerelle et distant, reliant les deux par un numéro de port commun.

mantipula
la source
21

L'option scp -3 devrait être ce que vous recherchez. Pour le mettre dans votre exemple:

scp -3 root@firstcomputer:./file root@secondcomputer:./

Notez que l'option -3 a été introduite pour la première fois dans OpenSSH 5.7, qui a été publié début 2011.

andol
la source
Mon scp n'implémente pas -3 lorsque j'exécute la commande j'obtiens scp: option illégale - 3 utilisation: scp [-1246BCEpqrv] ...
JorgeO
1
C'est correct. -3 n'est disponible que dans la dernière version d'OpenSSH, que je ne suis pas sûr que Debian ait encore implémentée.
Rilindo
Ahh, désolé pour ça. Mise à jour de la réponse concernant l'exigence de version.
andol
1

Vous pouvez essayer ceci:

root@firstcomputer:./file /tmp && scp /tmp/file root@secondcomputer:./ && rm /tmp/file

Cela copiera le fichier dans le répertoire / tmp sur le troisième ordinateur et s'il réussit, il recopiera ce fichier sur l'ordinateur secondaire puis se nettoiera. Puisque vous utilisez l'opérateur &&, chaque commande ne s'exécutera que si la commande précédente a réussi.

Rilindo
la source
Ne connaissait pas l'opérateur &&. Mieux que d'utiliser;
JorgeO
Il s'agit de la même technique que la question d'origine utilisée dans le premier exemple, qui tentait d'être évitée (copie de l'ordinateur A vers la machine locale, puis copie du fichier local vers l'ordinateur B).
Jason C