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.
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.
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"
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.
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