Minulla on kaksi etäsolmua, joita yritän lähettää tiedostoja toisilta.
scp remote1:~/testSCP [email protected]:~/
Minulla on ~/ssh/config
määritetty paikalliseen koneeseeni, joten se käyttää oletusarvoisesti porttia 2222
.
Mutta kauko-ohjaimen 1 ”oletusarvoinen ssh-portti on asetettu 22
-kohtaan ssh-kokoonpanossa portin 2222
sijaan. ulkoinen yhteys ssh: n kautta, se käyttää porttia 22
oletuksena.
Yritin seuraavaa, joka ei toiminut:
scp -P 2222 remote1:~/testSCP [email protected]:~/
Kokeilin myös seuraavaa, joka ei myöskään toiminut:
scp remote1:~/testSCP -P 2222 [email protected]:~/
Molemmille sain seuraavan virheen:
ssh: connect to host 10.0.1.10 port 22: Connection refused lost connection
Mikä on totta, koska 10.0.1.10
käyttää porttia 2222
eikä porttia 22
.
Kuinka määritän remote1: n käyttämään porttia 2222
yritettäessä lähettää tiedostoja osoitteeseen (remote2) osoitteesta remote1
?
Päivitä
Yritettyäsi
scp -3 remote1:~/testSCP [email protected]:~/
Minulla on outoa käyttäytymistä. Vaikka salasanani on oikea, se antaa minulle seuraavan tuloksen:
[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:
En ole vielä ottanut käyttöön avaimetonta todennusta.
Uusi päivitys
Kokeiltuani sitä usealla eri tavalla pystyin tekemään sen komentosarjoissani kirjautumalla sisään remote1: ään ssh: n kautta localhostiltani ja sitten scp from remote1: stä remote2: een. Tämä ei kuitenkaan vastaa kysymykseeni. Tarkoitin tehdä se suoraan paikalliselta koneeltani ja siirtää sitten tiedostoja kahden ilmentymän välillä, jota mielestäni ei tueta, jos kahden instanssin ssh-demonit käyttävät eri porttia kuin ssh-yhteyden oletusarvo.
Kommentit
Vastaa
Et voi tehdä sitä yksinkertaisella kaukosäätimen scp: llä [1].
Sen sijaan, ssh ensimmäiselle etäisännälle ja suorita scp porttiargumentilla sieltä:
ssh -p 2222 ruser1@rhost1 scp -P 2222 /rpath/1 ruser2@rhost2:/rpath/2
Jos haluat tehdä juuri sen, mitä scp
tekee, voit myös lisätä vaihtoehdot -n -x -oClearAllForwardings=yes
kohtaan ssh
, vaikka niitä ei yleensä tarvita.
[1]: scp
: n uudemmat versiot tukevat uri-määritystä (portti mukaan lukien) host:path
-kohdan sijaan, mutta vain käytettäessä vaihtoehtoa -3
(”kulkea paikallisen isännän läpi”).
Joten voit todennäköisesti käyttää
scp -3 -P 2222 ruser1@rhost1:/rpath/1 scp://ruser2@rhost2:2222//rpath/2
(huomaa, että /
host[:port]
ei ole osa polkua – viittaa ./file
-kansioon user
” kotihakemistossa).
Mutta kopiointi localhostin kautta on hitaampaa, ja kokemukseni mukaan se piilottaa virheet. Esimerkiksi tämä ei tulosta virhesanomaa, vaikka ei pystyisi luomaan mitään /foo/bar/baz
-tiedostoa:
scp -3 localhost:.bashrc localhost:/foo/bar/baz
En päässyt tähän syvyyteen – vain välttin sitä 😉
Jos joku ei ole vakuuttunut kaikesta tästä, hän voi katsoa lähdekoodi :
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"); }
Huomaa, että muuttuja tport
on asetettu vain jäsentämällä scp://
uri, eikä sitä yksinkertaisesti ole olemassa versioissa, jotka ovat vanhempia kuin 7.6p1 (lokakuu 2017).
Kommentit
- Voisitko selittää, mitä
-x -oClearAllForwardings=yes
tämä vaihtoehto tekee vastauksessasi? Ajattelin myös, voidaanko se tehdä käyttämällärsync
. -
-x
poistaa X11-edelleenlähetyksen käytöstä ja-oClear..
poistaa kaikki TCP-edelleenlähetykset käytöstä (jos jokin niistä pakotettiin~/.ssh/config
tai/etc/ssh/ssh_config
kautta) - @RakibFiha rsync sanoo: " Lähde ja kohde eivät molemmat voi olla etäällä ". Ehkä sen ympärillä on temppuja, mutta sen pitäisi olla erillinen kysymys.
- Nyt ymmärsin sen yksityiskohtaisen selityksen jälkeen. (y)
~/.ssh/config
kauko-ohjaimissa 1 ja kauko-ohjaimessa oletusporttia ~ / .ssh / config ei muuteta, joten sen oletusportti 22. Voin muokata niitä, mutta haluaisin tehdä sen yksirivisellä sen sijaan, että muokkaaisit jokaista ssh-kokoonpanoa joka kerta.ssh
yhdeksi etäkoneille ja antaa yksinkertaisenscp
sieltä tai tehdä sen yhdessä rivissä jotainssh -t -p <remote1 port> user1@remote1 'scp -P <remote2 port> user2@remote2:/source/path /dest/path'
. Lisäksi ' sinun ei tarvitse muokataconfig
-tiedostoja milloin tahansa: vain kerran kullekin parille isäntää (esim. Portin asettaminen yhteyden muodostaminenremote2
-palveluun osoitteessaremote1
), mutta tietysti tämä voi olla sinulle epämukavaa, riippuen isäntiesi määrästä.