Comment spécifier le port pour scp pour un serveur distant?

Jai deux nœuds distants auxquels jessaie denvoyer des fichiers de lun à lautre.

scp remote1:~/testSCP [email protected]:~/ 

Jai ~/ssh/config configuré sur ma machine locale donc, il utilise le port 2222 par défaut.

Mais le port ssh par défaut de remote1 est défini sur 22 dans la configuration ssh au lieu du port 2222. Donc, pour en faire connexion externe via ssh, il utilise le port 22 par défaut.

Jai essayé ce qui na pas fonctionné:

scp -P 2222 remote1:~/testSCP [email protected]:~/ 

Jai également essayé ce qui suit, qui na pas non plus fonctionné:

scp remote1:~/testSCP -P 2222 [email protected]:~/ 

Pour les deux, jai eu lerreur suivante:

ssh: connect to host 10.0.1.10 port 22: Connection refused lost connection 

Ce qui est vrai puisque 10.0.1.10 utilise le port 2222 et non le port 22.

Comment puis-je spécifier remote1 pour utiliser le port 2222 en essayant denvoyer des fichiers à (remote2) de remote1?

Mettre à jour

Après avoir essayé

 scp -3 remote1:~/testSCP [email protected]:~/ 

Jai un comportement étrange. Même si mon mot de passe est correct, il me donne le résultat suivant:

[email protected]"s password: [email protected]"s password: Permission denied, please try again. [email protected]"s password: Permission denied, please try again. [email protected]"s password: 

Je nai pas encore activé lauthentification sans clé.

Nouvelle mise à jour

Après lavoir essayé de plusieurs manières, jai pu le faire dans mes scripts en me connectant à remote1 via ssh depuis mon hôte local puis scp de remote1 à remote2. Cependant, cela ne répond pas à ma question. Javais lintention de le faire directement à partir de ma machine locale, puis de transférer des fichiers entre deux instances, ce qui, je pense, nest pas pris en charge si deux instances « démons ssh utilisent un port différent de celui par défaut pour la connexion ssh.

Commentaires

  • stackoverflow.com/questions/10341032/… pourrait vous aider
  • Jai essayé ceux-ci comme je lai mentionné dans ma question. Cela ne semble pas fonctionner pour moi
  • localhost écoutant le port 22 mais dans la configuration ssh, il est spécifié pour remote1 à remote2 sur le port 2222. Oui, je voulais dire ~/.ssh/config Dans remote 1 et remote, le port par défaut dans ~ / .ssh / config est inchangé, donc son port par défaut 22. Je peux les modifier, mais je aimerait le faire en utilisant une seule ligne, au lieu de modifier chaque configuration ssh à chaque fois.
  • Ok. Je ' suggère de modifier votre question, ajoutant que vous pouvez, mais que vous nêtes ' pas disposé à le faire, modifiez votre . Ensuite, vous pouvez ssh en un aux hôtes distants et émettre un simple scp à partir de là, ou le faire en une ligne avec quelque chose comme ssh -t -p <remote1 port> user1@remote1 'scp -P <remote2 port> user2@remote2:/source/path /dest/path'. De plus, vous navez pas ' à modifier les fichiers config à la fois: une seule fois pour chaque couple dhôtes (par exemple, définir le port pour connexion à remote2 sur remote1), mais bien sûr, cela peut vous gêner, selon le nombre dhôtes que vous avez.
  • Oui, cela répond à votre question. " Non " est une réponse et est la réponse, peu importe si vous laimez ou non.

Réponse

Vous ne pouvez pas faire cela avec un simple scp distant-distant [1].

Au lieu de cela, ssh sur le premier hôte distant et exécutez scp avec un argument de port à partir de là:

ssh -p 2222 ruser1@rhost1 scp -P 2222 /rpath/1 ruser2@rhost2:/rpath/2 

Si vous voulez faire exactement ce que fait scp, vous pouvez également ajouter les options -n -x -oClearAllForwardings=yes à ssh, bien que ce ne soit généralement pas nécessaire.


[1]: les nouvelles versions de scp prennent en charge une spécification dURI (y compris un port) au lieu de host:path, mais uniquement lors de lutilisation de loption -3 (« passer par lhôte local »).

Vous pourriez donc probablement utiliser

scp -3 -P 2222 ruser1@rhost1:/rpath/1 scp://ruser2@rhost2:2222//rpath/2 

(notez que le / après le host[:port] ne fait pas partie du chemin – fera référence à ./file dans le répertoire de base de user« ).

Mais la copie via localhost est à la fois plus lente et, daprès mon expérience, elle masquera les erreurs. Par exemple, cela nimprimera aucun message derreur, même sil ne sera pas possible de créer un fichier /foo/bar/baz:

scp -3 localhost:.bashrc localhost:/foo/bar/baz 

Je nai pas approfondi cela – je lai simplement évité 😉


Si quelquun nest pas convaincu par tout cela, il peut regarder le code source :

void toremote(char *targ, int argc, char **argv) { ... } else if (host) { /* standard remote to remote */ if (tport != -1 && tport != SSH_DEFAULT_PORT) { /* This would require the remote support URIs */ fatal("target port not supported with two " "remote hosts without the -3 option"); } 

Notez que la variable tport est uniquement définie en analysant un uri scp://, et il nexiste tout simplement pas dans les versions antérieures à 7.6p1 (octobre 2017).

Commentaires

  • Pourriez-vous expliquer ce que -x -oClearAllForwardings=yes fait cette option dans votre réponse sil vous plaît? Je me demandais également si cela pouvait être fait en utilisant plutôt rsync.
  • -x désactive le transfert X11 et -oClear.. désactive tous les transferts TCP (au cas où lun dentre eux aurait été forcé via ~/.ssh/config ou /etc/ssh/ssh_config)
  • @RakibFiha rsync dit: " La source et la destination ne peuvent pas être toutes les deux distantes ". Il y a peut-être des trucs autour de ça, mais cela devrait être une question distincte.
  • Maintenant, je dois men rendre compte après votre explication détaillée. (y)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *