web-dev-qa-db-fra.com

scp entre deux hôtes distants de mon (troisième) pc

J'ai deux hôtes distants.
Host1-> 10.3.0.1
Host2-> 10.3.0.2
Les deux exécutent un serveur SSH.

Le serveur ssh écoute sur le port 22 de l'hôte 1 et sur le port 6969 de l'hôte 2. Maintenant, en utilisant ma machine locale, je dois copier quelque chose de Host1 à Host2 sans me connecter ni à Host1 ni à Host2 via ssh. Quelque chose comme,

scp [email protected]:/path/to/file [email protected]/path/to/file

Comment puis-je faire cela, veuillez noter que les deux hôtes utilisent des ports différents pour ssh.

124
uwais ibrahim

Dans le passé, la façon dont scp fonctionnait, lorsque vous appeliez ( naïvement ) pour copier des fichiers entre des systèmes distants, était très gênante: si vous écriviez, par exemple

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

scp ouvrirait d’abord une session ssh sur remote1, puis exécuterait scp de là vers remote2. Pour que cela fonctionne, vous devez configurer les informations d'identification d'autorisation pour remote2 sur remote1.

La façon moderne de le faire (au contraire, "moderne" car elle a été mise en œuvre il y a quelques années à peine et que tout le monde n'a peut-être pas un -3- capable scp) nécessite deux étapes. La première étape nécessaire consiste à utiliser ~/.ssh/config pour configurer toutes les options de connexion aux connexions remote1 et remote2, comme suit:

    Host remote1.example.org
    Port 2222
    IdentityFile /path/to/Host1-id_rsa

    Host remote2.example.org
    Port 6969
    IdentityFile /path/to/Host2-id_rsa

De cette façon, il devient possible de transmettre toutes les options nécessaires à la commande sans ambiguïtés : par exemple, si nous avions dit sur le CLI utilisez le port 2222 sans la configuration ci-dessus, il aurait été difficile de savoir si nous faisions référence à remote1 ou à remote2 , de même pour le fichier contenant les clés cryptographiques. Ainsi, le CLI reste ordonné et simple.

Deuxièmement, utilisez l’option -3, comme suit:

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

L'option -3 indique à scp d'acheminer le trafic via le PC sur lequel la commande est émise, même s'il s'agit d'une 3ème partie du transfert. De cette manière, les informations d'identification de l'autorisation ne doivent résider que sur le PC émetteur, le tiers.

203
MariusMatutiae

La dernière fois que j'ai essayé cela, scp n'était pas capable de faire ça. Votre ligne de commande a l'air bien. Cette solution de contournement fonctionnera:

ssh -p port_on_machine1 user@machine1 "cat /path/to/file/one"|ssh -p port_on_machine2 user@machine2 "cat >/path/to/file/two"
5
peterh

Dans mon cas, je faisais une copie distante à distante, sans l'argument -3. Le port indiqué avec le paramètre '-P' fonctionne avec le premier serveur, mais le port 22 est utilisé avec le deuxième.

ssh -P 1234 [email protected] [email protected]

La solution consiste à modifier le fichier /etc/ssh/ssh_config dans server1 et à ajouter les lignes suivantes:

Host *.otherdomain.com
   Port  1234

De cette manière, le port 1234 est utilisé pour les deux. Cela pourrait être différent aussi.

Cette solution offre un meilleur débit que les solutions précédentes, car la communication est directe.

4
david.perez

La source et la cible peuvent être spécifiées en tant qu'URI sous la forme scp: // [utilisateur @] hôte [: port] [/ chemin]

afin que vous puissiez courir:

scp -3 scp://[email protected]:22/path/to/file scp://[email protected]:6969/path/to/file
1
molabib