Je dois transférer un fichier entre deux ordinateurs qui ne sont pas connectés au même réseau. J'ai reçu un troisième ordinateur qui puisse voir les deux réseaux via un VPN.
Depuis le troisième ordinateur, je peux faire:
scp root@firstcomputer:./file ./
Et terminer le transfert avec la phrase suivante:
scp ./file root@secondcomputer:./
Mais je ne peux pas le faire dans 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 communiqué ne peut pas voir le second communiqué. Est-il possible de donner à SCP un param qui traite du fait que la machine qui exécute le programme SCP est la seule qui puisse voir les deux ordinateurs?
À propos, le troisième ordinateur est un Mac avec lion et le poing et la seconde exécute Debian.
Vous devriez être capable d'utiliser un tunnel SSH.
En supposant que vous essayez de transférer un fichier d'un ordinateur distant ("Remote") à 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 une quantité illimitée de commandes SCP sur ce tunnel (en tapant toujours 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 fonctionnait parfaitement.
La méthode ci-dessus convient si le réseau distant est sécurisé, mais s'il n'est pas sécurisé, vous devez établir un tunnel entre la locale et la passerelle, et un autre tunnel entre la passerelle et la télécommande, reliant les deux par un numéro de port commun.
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ée au début de 2011.
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 se reproduira ce fichier sur l'ordinateur secondaire, puis nettoyer lui-même. Puisque vous utilisez l'opérateur &&, chaque commande n'exécutera que si la commande précédente réussit.