Jeg har to eksterne noder som jeg prøver å sende filer fra en til en annen.
scp remote1:~/testSCP [email protected]:~/
Jeg har ~/ssh/config
satt opp i min lokale maskin, så den bruker port 2222
som standard.
Men fjernkontrollens standard ssh-port er satt til 22
i ssh-konfigurasjonen i stedet for port 2222
. ekstern tilkobling via ssh, den bruker port 22
som standard.
Jeg prøvde følgende som ikke fungerte:
scp -P 2222 remote1:~/testSCP [email protected]:~/
Prøvde også følgende, som heller ikke fungerte:
scp remote1:~/testSCP -P 2222 [email protected]:~/
For begge fikk jeg følgende feil:
ssh: connect to host 10.0.1.10 port 22: Connection refused lost connection
Hvilket er sant siden 10.0.1.10
bruker port 2222
og ikke port 22
.
Hvordan kan jeg spesifisere remote1 for å bruke port 2222
når jeg prøver å sende filer til (ekstern2) fra remote1
?
Oppdater
Etter å ha prøvd
scp -3 remote1:~/testSCP [email protected]:~/
Jeg får rar oppførsel. Selv om passordet mitt er riktig, gir det meg følgende utdata:
[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 ikke aktivert nøkkelfri autentisering ennå.
Ny oppdatering
Etter å ha prøvd det på flere måter, var jeg i stand til å gjøre det i skriptene mine ved å logge på fjernkontrollen 1 via ssh fra localhost og deretter scp fra fjernkontroll1 til fjernkontroll2. Dette svarer imidlertid ikke på spørsmålet mitt. Jeg hadde til hensikt å gjøre det direkte fra min lokale maskin og deretter overføre filer mellom to forekomster, som jeg tror ikke støttes hvis ssh-demoner fra to forekomster bruker en annen port enn standard for ssh-tilkobling.
Kommentarer
Svar
Du kan ikke gjøre det med en enkel fjern-til-ekstern scp [1].
I stedet for det, ssh til den første eksterne verten og kjør scp med et portargument derfra:
ssh -p 2222 ruser1@rhost1 scp -P 2222 /rpath/1 ruser2@rhost2:/rpath/2
Hvis du vil gjøre akkurat det scp
gjør, kan du også legge til -n -x -oClearAllForwardings=yes
-alternativene til ssh
, selv om det vanligvis ikke er nødvendig.
[1]: nyere versjoner av scp
støtter en uri-spesifikasjon (inkludert en port) i stedet for host:path
, men bare når du bruker alternativet -3
(«gå gjennom den lokale verten»).
Så du kan sannsynligvis bruke
scp -3 -P 2222 ruser1@rhost1:/rpath/1 scp://ruser2@rhost2:2222//rpath/2
(legg merke til at /
etter host[:port]
er ikke en del av banen – vil referere til ./file
i user
» s hjemmekatalog).
Men kopiering gjennom localhost er begge langsommere, og etter min erfaring vil det skjule feil. For eksempel vil ikke dette skrive ut noen feilmelding, til tross for at den ikke kan opprette noen /foo/bar/baz
-fil:
scp -3 localhost:.bashrc localhost:/foo/bar/baz
Jeg kom ikke i dybden med dette – bare unngikk det 😉
Hvis noen 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"); }
Legg merke til at tport
variabelen bare er angitt ved å analysere en scp://
uri, og den eksisterer ganske enkelt ikke i versjoner eldre enn 7.6p1 (okt 2017).
Kommentarer
- Kan du forklare hva
-x -oClearAllForwardings=yes
dette alternativet gjør i svaret ditt? Jeg tenkte også om det kan gjøres ved å brukersync
i stedet. -
-x
deaktiverer X11-videresending og-oClear..
deaktiverer alle tcp-videresendinger (i tilfelle noen av dem ble tvunget via~/.ssh/config
eller/etc/ssh/ssh_config
) - @RakibFiha rsync sier: " Kilden og destinasjonen kan ikke begge være ekstern ". Kanskje det er triks rundt det, men det burde være et eget spørsmål.
- Nå fikk jeg innse det etter din detaljerte forklaring. (y)
~/.ssh/config
I fjernkontroll 1 og fjernkontroll er standardporten i ~ / .ssh / config uendret, så standardporten 22. Jeg kan redigere dem, men jeg ønsker å gjøre det ved hjelp av en en-liner, i stedet for å redigere hver ssh-konfigurasjon hver gang.ssh
til en til de eksterne vertene og utstede en enkelscp
derfra, eller gjøre det i en linje med noe somssh -t -p <remote1 port> user1@remote1 'scp -P <remote2 port> user2@remote2:/source/path /dest/path'
. Du vil ikke ' ikke trenger å redigereconfig
filer en gang: bare en gang for hvert par verter (f.eks. Angi porten for koble tilremote2
påremote1
), men du kan selvfølgelig være ukomfortabel med dette, avhengig av antall verter du har.