Hvordan specificeres port til scp til en ekstern server?

Jeg har to eksterne knudepunkter, som jeg prøver at sende filer fra den ene til den anden.

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

Jeg har ~/ssh/config opsat i min lokale maskine, så den bruger port 2222 som standard.

Men fjernbetjeningens standard ssh-port er indstillet til 22 i ssh-konfigurationen i stedet for port 2222. Så for at lave enhver ekstern forbindelse via ssh, den bruger port 22 som standard.

Jeg prøvede følgende, som ikke fungerede:

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

Prøvede også følgende, hvilket heller ikke fungerede:

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

For begge fik jeg følgende fejl:

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

Hvilket er sandt, da 10.0.1.10 bruger port 2222 og ikke port 22.

Hvordan kan jeg specificere remote1 til at bruge port 2222 når jeg prøver at sende filer til (remote2) fra remote1?

Opdatering

Efter at have prøvet

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

Jeg får underlig opførsel. Selvom min adgangskode er korrekt, giver det mig følgende 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: 

Jeg har endnu ikke aktiveret nøglefri godkendelse.

Ny opdatering

Efter at have prøvet det på flere måder, var jeg i stand til at gøre det i mine scripts ved at logge ind på remote1 via ssh fra min localhost og derefter scp fra remote1 til remote2. Dette svarer dog ikke på mit spørgsmål. Jeg havde til hensigt at gøre det direkte fra min lokale maskine og derefter overføre filer mellem to forekomster, som jeg tror ikke understøttes, hvis to forekomster “ssh-dæmoner bruger en anden port end standard for ssh-forbindelse.

Kommentarer

  • stackoverflow.com/questions/10341032/… kan hjælpe dig
  • Jeg prøvede dem, som jeg nævnte i mit spørgsmål. Virkede ikke at fungere for mig
  • localhost lytter til port 22, men i ssh config er det specificeret for både remote1 til remote2 til port 2222. Ja, jeg mente ~/.ssh/config I fjernbetjening 1 og fjernbetjening er standardporten i ~ / .ssh / config uændret, så dens standardport 22. Jeg kan redigere dem, men jeg vil gerne gøre det ved hjælp af en one-liner i stedet for at redigere hver ssh-konfiguration hver eneste gang.
  • Ok. Jeg ' foreslår at redigere dit spørgsmål, tilføjer, at du kan, men ikke er ' ikke villig til at redigere din filer. Derefter kan du ssh ind i en til fjernværterne og udstede en simpel scp derfra, eller gøre det i en linje med noget som ssh -t -p <remote1 port> user1@remote1 'scp -P <remote2 port> user2@remote2:/source/path /dest/path'. Du vil ikke ' ikke skulle redigere config filer på en gang: kun en gang for hvert par værter (f.eks. Indstilling af port til opretter forbindelse til remote2remote1), men du kan selvfølgelig være ubehagelig med dette afhængigt af antallet af værter du har.
  • Ja, det svarer ikke på dit spørgsmål. " Nej " er et svar og er svaret, uanset om kan du lide det eller ej.

Svar

Du kan ikke gøre det med en simpel fjern-til-fjern scp [1].

I stedet for det skal du ssh til den 1. eksterne vært og køre scp med et portargument derfra:

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

Hvis du vil gøre præcis, hvad scp gør, kan du også føje -n -x -oClearAllForwardings=yes til ssh, selvom det normalt ikke er nødvendigt.


[1]: nyere versioner af scp understøtter en uri-specifikation (inklusive en port) i stedet for host:path, men kun når du bruger indstillingen -3 (“gå gennem den lokale vært”).

Så du kunne sandsynligvis bruge

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

(bemærk, at / efter host[:port] er ikke en del af stien – henviser til ./file i user” s hjemmekatalog).

Men kopiering gennem localhost er begge langsommere, og efter min erfaring vil det skjule fejl. For eksempel vil dette ikke udskrive nogen fejlmeddelelse på trods af ikke at kunne oprette nogen /foo/bar/baz -fil:

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

Jeg kom ikke dybt ind i dette – bare undgik det 😉


Hvis nogen ikke er overbevist om alt dette, kan de se på kildekode :

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

Bemærk, at tport variablen kun er indstillet ved at analysere en scp:// uri, og den findes simpelthen ikke i versioner ældre end 7.6p1 (okt. 2017).

Kommentarer

  • Kunne du forklare, hvad -x -oClearAllForwardings=yes denne mulighed gør i dit svar tak? Jeg tænkte også, om det kan gøres ved hjælp af rsync i stedet.
  • -x deaktiverer X11-videresendelse og -oClear.. deaktiverer alle tcp-videresendelser (hvis nogen af dem blev tvunget via ~/.ssh/config eller /etc/ssh/ssh_config)
  • @RakibFiha rsync siger: " Kilden og destinationen kan ikke begge være fjerntliggende ". Måske er der tricks omkring det, men det burde være et separat spørgsmål.
  • Nu må jeg indse det efter din detaljerede forklaring. (y)

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *