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=yestämä vaihtoehto tekee vastauksessasi? Ajattelin myös, voidaanko se tehdä käyttämällärsync. -
-xpoistaa X11-edelleenlähetyksen käytöstä ja-oClear..poistaa kaikki TCP-edelleenlähetykset käytöstä (jos jokin niistä pakotettiin~/.ssh/configtai/etc/ssh/ssh_configkautta) - @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/configkauko-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.sshyhdeksi etäkoneille ja antaa yksinkertaisenscpsieltä 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ä.