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 denny@67.12.21.133: /home/denny/testapp1.txt denny@67.129.242.40:

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


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 denny@67.12.21.133 scp -rp /home/denny/testapp1.txt denny@67.129.242.40:

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 denny@67.12.21.133:/home/denny/testapp1.txt denny@67.129.242.40:

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 denny@67.12.21.133 scp -rp -P 6774 /home/denny/testapp1.txt denny@67.129.242.40:

(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


'-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


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 denny@67.12.21.133:/home/denny/testapp1.txt -P 6774 denny@67.129.242.40:

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


Ç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 root@192.168.1.2:/path/to/files /destination/path

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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.