SCP avec deux ports différents

15

Comment puis-je utiliser la commande scp pour copier des fichiers entre deux serveurs distants à partir de mon PC local?

serveur distant 1: IP = 67.12.21.133 & port = 6774

serveur distant 2: IP = 67.129.242.40 & port = 6774

scp -rp -P 6774 [email protected]: /home/denny/testapp1.txt [email protected]:

Il donne une erreur après avoir donné le mot de passe 67.12.21.133,

ssh: connexion à l'hôte 67.129.242.40 port 22: connexion refusée

connexion perdue

linuxspider
la source
Je viens de tester cela aussi, mais ne fonctionne que pour le premier hôte. Le second est verrouillé sur le port 22.
gajdipajti

Réponses:

19

Vous pouvez utiliser ~/.ssh/configpour spécifier les ports à utiliser pour les hôtes (et pour définir bien d'autres choses intéressantes; consultez la page de manuel man ssh_config):

# ~/.ssh/config

Host 67.12.21.133
  Port 6774

Host 67.129.242.40
  Port 6774

Pour ce faire, vous devez utiliser l'option -3scp, qui copie les fichiers via votre machine locale. Sinon, scp émet la commande scp via ssh sur le premier hôte, donc elle s'exécute

 ssh -p 6774 [email protected] scp -rp /home/denny/testapp1.txt [email protected]:

puis la configuration ~ / .ssh / du premier hôte distant (67.12.21.133) est utilisée à la place de votre hôte local.

Lorsque vous avez ~/.ssh/configcorrectement configuré votre , cela devrait fonctionner:

scp -rp3 [email protected]:/home/denny/testapp1.txt [email protected]:

Bien sûr, vous pouvez également copier le contenu du fichier ~ / .ssh / config sur votre premier hôte distant, puis vous pouvez utiliser scp sans l' -3option, ce qui accélérera probablement le transfert.

Ou vous pouvez utiliser l'astuce que scp utilise et utiliser une telle ligne de commande:

ssh -p 6774 [email protected] scp -rp -P 6774 /home/denny/testapp1.txt [email protected]:

(Notez la casse différente du paramètre de port pour ssh et scp: ssh -p 6774vs. scp -P 6774)

PS: J'ai obtenu ces informations du bugzilla d'OpenSSH où je les ai entrées comme bug: https://bugzilla.mindrot.org/show_bug.cgi?id=2020

daniel kullmann
la source
'-3' ne semble pas être une option valide - je reçois juste "scp: option illégale - 3".
Rich Sedman
8

Je n'ai trouvé aucune solution facile mais vous pouvez essayer d'utiliser sshfs de la manière suivante:

mkdir /tmp/h1
mkdir /tmp/h2

sshfs -p 6774 user1@host1:/public /tmp/h1
sshfs -p 2211 user2@host2:/data/src /tmp/h2

cp /tmp/h1/files.* /tmp/h2

fusermount -u /tmp/h1
fusermount -u /tmp/h2

Une autre façon pourrait être d'utiliser ssh (en fait non testé avec succès):

ssh user1@host1 "cat /public/file.bin" | ssh user2@host2 "cat >/data/file.bin"

Actuellement, je n'ai pas trouvé la bonne façon d'entrer les deux mots de passe. Il demande parfois les deux mots de passe mais n'accepte personne. Peut-être que si vous échangez les clés ssh entre les hôtes, cela fonctionne. Parce que vous n'avez pas besoin des mots de passe.

J'espère que ça aide? Thomas

tpf
la source
6

Selon cette page du blog de la Linux Academy, vous devez simplement utiliser l' -P 6774option juste avant le deuxième chemin distant:

scp -rp -P 6774 [email protected]:/home/denny/testapp1.txt -P 6774 [email protected]:

Chaque utilisation de l' -Pindicateur s'applique uniquement à l'emplacement suivant sur la ligne de commande, pas à la commande entière. Tout emplacement qui ne comporte pas de -Pchemin entre lui et le chemin précédent (ou le nom de la commande [ scp]) prend par défaut le port standard (22).

Dan Hunsaker
la source
Ça ne marche pas pour moi. C'est dommage, car cela semble la meilleure solution. Le lien est rompu.
david.perez
1
Je viens de mettre à jour le lien (même si j'ai oublié de me connecter d'abord ...). Linux Academy a décidé de restructurer son site. J'espère que ça aide, certains!
Dan Hunsaker
Si seulement cela fonctionnait. Mais je comprends -P: No such file or directory.
Tom
@Tom - Sur quel système utilisez-vous cela? Vous pouvez avoir une implémentation différente de scpcelle référencée ici.
Dan Hunsaker
C'est Ubuntu 17.04.
Tom
-2

Si vous devez transférer des données d'un serveur à un autre, utilisez la commande SCP. Faire cela

Appuyez simplement sur Ctrl+ Alt+ Tsur votre clavier pour ouvrir Terminal. Lorsqu'il s'ouvre, exécutez la commande ci-dessous.

scp -pr [email protected]:/path/to/files /destination/path

Remarque: Le paramètre -P peut être utilisé si vous souhaitez mentionner le numéro de port.

Mitch
la source
2
vous n'avez pas lu la question. Il a un problème avec les ports. vous pouvez définir le premier port, mais écraser le second avec le paramètre -P
gajdipajti
@gajdipajti Je n'ai pas spécifié de port dans ma réponse et je l'ai ajouté comme note. L'utilisateur a également déclaré qu'il utilise le même port. Regardez les Q. 2e et 3e lignes :)
Mitch
2
Mais cela ne fonctionne pas de cette façon, vous définirez le premier avec -P mais le second restera 22. Essayez-le. Je fais les tests en ce moment, mais toujours pas de solutions de travail.
gajdipajti
Vous utiliseriez uniquement l'option -P si vous utilisez un port non standard.
Mitch