Hoe geef ik een poort op voor scp voor een externe server?

Ik heb twee externe knooppunten die ik probeer bestanden van de ene naar de andere te verzenden.

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

Ik heb ~/ssh/config ingesteld op mijn lokale computer, dus het gebruikt standaard poort 2222.

Maar de standaard ssh-poort van remote1 is ingesteld op 22 in de ssh-configuratie in plaats van poort 2222. Dus, om een externe verbinding via ssh, het gebruikt standaard poort 22.

Ik heb het volgende geprobeerd, maar dat werkte niet:

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

Ik heb ook het volgende geprobeerd, dat ook niet werkte:

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

Voor beide kreeg ik de volgende foutmelding:

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

Wat waar is aangezien 10.0.1.10 poort 2222 gebruikt en niet poort 22.

Hoe kan ik specificeren dat remote1 poort 2222 gebruikt wanneer ik bestanden probeer te verzenden naar (remote2) van remote1?

Update

Na het proberen

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

Ik krijg raar gedrag. Hoewel mijn wachtwoord correct is, geeft het me de volgende output:

[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: 

Ik heb nog geen sleutelloze authenticatie ingeschakeld.

Nieuwe update

Nadat ik het op verschillende manieren had geprobeerd, kon ik het in mijn scripts doen door in te loggen op de remote1 via ssh vanaf mijn localhost en vervolgens scp van remote1 naar remote2. Dit geeft echter geen antwoord op mijn vraag. Ik was van plan het rechtstreeks vanaf mijn lokale computer te doen en vervolgens bestanden over te dragen tussen twee instanties, wat volgens mij niet wordt ondersteund als twee instanties “ssh-daemons een andere poort gebruiken dan de standaardpoort voor de ssh-verbinding.

Opmerkingen

  • stackoverflow.com/questions/10341032/… kan je helpen
  • Ik heb die geprobeerd zoals ik al zei in mijn vraag. Scheen niet voor mij te werken
  • localhost luistert naar poort 22 maar in ssh configuratie is het gespecificeerd voor zowel remote1 als remote2 naar poort 2222. Ja, ik bedoelde ~/.ssh/config In remote 1 en remote is de standaardpoort in ~ / .ssh / config ongewijzigd, dus de standaardpoort 22. Ik kan ze bewerken, maar ik zou het graag doen met een one-liner, in plaats van elke ssh-configuratie elke keer opnieuw te bewerken.
  • Oké. Ik ' stel voor om je vraag te wijzigen, als je toevoegt dat je kunt, maar ' niet bereid bent, bewerk dan je bestanden. Vervolgens kunt u ssh naar de externe hosts sturen en van daaruit een eenvoudige scp geven, of het op één regel doen met zoiets als ssh -t -p <remote1 port> user1@remote1 'scp -P <remote2 port> user2@remote2:/source/path /dest/path'. Bovendien hoef je ' niet config bestanden op elk moment te bewerken: slechts één keer voor elk paar hosts (bijv. De poort instellen voor verbinding maken met remote2 op remote1), maar je kunt je hier natuurlijk ongemakkelijk bij voelen, afhankelijk van het aantal hosts dat je hebt.
  • Ja, dat beantwoordt uw vraag. " Nee " is een antwoord en is het antwoord, ongeacht of je vindt het leuk of niet.

Antwoord

Je kunt dat niet doen met een simpele remote-to-remote scp [1].

In plaats daarvan ssh naar de eerste externe host en voer scp uit met een poortargument van daaruit:

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

Als je precies wilt doen wat scp doet, kun je ook de -n -x -oClearAllForwardings=yes -opties toevoegen aan ssh, hoewel dat meestal niet nodig is.


[1]: nieuwere versies van scp ondersteunen een uri-specificatie (inclusief een poort) in plaats van host:path, maar alleen bij gebruik van de -3 optie (“pass through the local host”).

U kunt dus waarschijnlijk

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

gebruiken (merk op dat de / na de host[:port] maakt geen deel uit van het pad – verwijst naar ./file in de user” s homedirectory).

Maar kopiëren via de localhost is beide langzamer en naar mijn ervaring zal het fouten verbergen. Hiermee wordt bijvoorbeeld “geen foutmelding afgedrukt, ook al kan er geen /foo/bar/baz -bestand worden gemaakt:

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

Ik ben hier niet diep op ingegaan – heb het gewoon vermeden 😉


Als iemand hier niet van overtuigd is, kunnen ze kijken naar de broncode :

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"); } 

Merk op dat de tport variabele alleen is ingesteld door een scp:// uri te parseren, en het bestaat gewoon niet in versies ouder dan 7.6p1 (oktober 2017).

Reacties

  • Kunt u alstublieft uitleggen wat -x -oClearAllForwardings=yes deze optie doet in uw antwoord? Ik dacht ook na of het kan worden gedaan door in plaats daarvan rsync te gebruiken.
  • -x schakelt X11-doorsturen uit en -oClear.. schakelt alle tcp-forwardings uit (in het geval dat een van deze werd afgedwongen via ~/.ssh/config of /etc/ssh/ssh_config)
  • @RakibFiha rsync zegt: " De bron en het doel kunnen niet beide op afstand zijn ". Misschien zijn er trucjes omheen, maar dat zou een aparte vraag moeten zijn.
  • Nu moet ik het me realiseren na je gedetailleerde uitleg. (y)

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *