211 votes

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

J'ai deux hôtes distants.
hôte1-> 10.3.0.1
hôte2-> 10.3.0.2
Les deux utilisent 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 l'hôte 1 à l'hôte 2 sans me connecter à l'hôte 1 ou à l'hôte 2 via ssh. Quelque chose comme,

scp user@10.3.0.1:/path/to/file user@10.3.0.2/path/to/file

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

323voto

MariusMatutiae Points 45233

Dans le passé, la manière dont scp a fonctionné, lorsqu'il a été appelé ( naïvement ) pour copier des fichiers entre systèmes distants, était très peu pratique : si vous écriviez, par exemple

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

scp ouvrirait d'abord un ssh sur remote1, puis il exécute scp de là à remote2. Pour que cela fonctionne, vous devez configurer les informations d'autorisation de remote2 sur remote1.

En revanche, la façon moderne de procéder ("moderne" parce qu'elle a été mise en œuvre il y a quelques années seulement, et que tout le monde n'a peut-être pas une -3 -capable scp ) nécessite deux étapes.  La première étape nécessaire consiste à utiliser ~/.ssh/config pour configurer toutes les options pour la connexion à la fois à 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 passer toutes les options nécessaires à la commande sans ambiguïté : par exemple, si nous avions dit sur le CLI utiliser le port 2222 sans la configuration ci-dessus, il n'aurait pas été clair si nous faisions référence à distant1 ou à à distance2 et de même pour le fichier contenant les clés cryptographiques. De cette façon, le CLI reste ordonné et simple.

Deuxièmement, utilisez le -3 comme suit :

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

El -3 L'option indique scp pour acheminer le trafic via le PC sur lequel la commande est émise, même s'il est une tierce partie au transfert. De cette façon, les informations d'autorisation ne doivent résider que sur le PC émetteur, la tierce partie.

45voto

molabib Points 449

La source et la cible peuvent être spécifiées comme une URI sous la forme scp://[user@]host[:port][/path].

pour que tu puisses courir :

scp -3 scp://user@10.3.0.1:22/path/to/file scp://user@10.3.0.2:6969/path/to/file

8voto

peterh Points 2332

La dernière fois que j'ai essayé, scp n'a pas pu le faire. Votre ligne de commande semble correcte. 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"

5voto

Sir_FZ Points 390

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

ssh -P 1234 user@server1.mydomain.com user@server2.otherdomain.com

La solution consiste à modifier le /etc/ssh/ssh_config dans server1 et ajoutez ces lignes :

Host *.otherdomain.com
   Port  1234

De cette façon, le port 1234 est utilisé pour les deux. Il peut aussi être différent.

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

3voto

Manfred Kaiser Points 121

Je sais que ce sujet date de quelques années, mais OpenSSH 8.4 (sortie le 27 septembre 2020) a ajouté le transfert d'agent à scp et sftp.

Il est maintenant possible de copier un fichier d'une machine distante à une autre, sans passer par votre machine locale ou fournir des informations d'identification sur le premier hôte, pour s'authentifier auprès du second hôte.

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

Attention ! L'utilisation du transfert d'agent pose un problème de sécurité, lorsque le premier hôte est compromis ou lorsque vous êtes affecté par une attaque mitm.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X