web-dev-qa-db-fra.com

Comment transférer un fichier entre deux serveurs distants à l'aide de scp à partir d'une troisième machine locale?

J'essaie de copier un fichier d'un serveur distant sur un serveur distant depuis mon ordinateur local . Voici ce que j'essaie de faire.

localA $ scp userB@remoteB:/path/to/file userC@remoteC:/path

Le problème est que je dois passer deux mots de passe pour userB et userC sur les ordinateurs distants. 

Selon Garron ce qui précède devrait fonctionner, mais la permission m'a été refusée.

Permission denied (gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive).
lost connection

Aucune suggestion?

18
Alan

Cette question existe déjà sur le superutilisateur: 

https://superuser.com/questions/686394/scp-between-two-remote-hosts-from-mon-third-pc

scp -3 user1@remote1:/home/user1/file1.txt user2@remote2:/home/user2/file1.txt

Comme décrit ici, l'option -3 indique à scp de router le trafic via le PC sur lequel la commande est émise.

Ce qui précède est vrai si remote1 et remote2 sont sur le même réseau.

Dans le cas où: - vous devez utiliser le transfert de port

29
user6459825

Si vous pouvez utiliser ssh sur les deux serveurs distants à partir de votre serveur local (local -> remote1 & local -> remote2), vous pouvez essayer:

ssh -A -t user1@remote1 scp srcpath user2@remote2:destpath

Ceci transférera directement de remote1 à remote2 en utilisant vos informations d'identification locales jusqu'au bout.

Si vous ne souhaitez pas que les mots de passe vous soient demandés, vous devez configurer le fichier registered_keys sur les télécommandes.

30
RubenCaro

Ceci est possible en utilisant la ligne de commande suivante dans le terminal linux:

scp -3 utilisateur1 @ ip: chemin/depuis/répertoire/utilisateur2 @ ip: chemin/vers/répertoire

une invite apparaît demandant des mots de passe comme ceci:

mot de passe utilisateur1 @ ip: utilisateur2 @ mot de passe ip:

Si vous donnez les deux mots de passe dans l'ordre en appuyant sur entrée après le premier mot de passe, il devrait accepter mais ne le fera pas. Même si vous donnez à nouveau les deux mots de passe dans l’ordre mais sans appuyer sur entrée après le premier mot de passe, il ne sera plus accepté.

Vous devez d'abord donner l'utilisateur 2, puis appuyer sur entrée, puis taper le mot de passe de l'utilisateur1 et appuyer sur entrée. Cela fonctionnera.

Je sais que cela ne semble pas bien, mais seulement cela fonctionnera. Ceci est un bug dans scp.

3
Rishav Sharan

Je trouve que -o "ForwardAgent yes” fait l'affaire:

localA $ scp -o "ForwardAgent yes” userB@remoteB:/path/to/file userC@remoteC:/path

J'aime mieux cela que le -3 car je ne veux pas d'une machine intermédiaire ralentissant les choses. J'aime @RubenCaro répondre aussi, mais cela semble plus direct.

1
wcochran

Vous n'avez besoin que de mots de passe si vous n'avez pas d'entrées dans le fichier authorised_keys. Une fois que vous vous êtes connecté aux 2 serveurs (localA -> remoteB & remoteB -> remoteC) et que vous avez établi la connexion sécurisée, votre commande initiale devrait fonctionner.

1
DS.