Kuinka määritetään portti scp: lle etäpalvelimelle?

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

  • stackoverflow.com/questions/10341032/… saattaa auttaa sinua
  • Yritin niitä, kuten mainitsin kysymyksessäni. Ei näyttänyt toimivan minulle
  • localhost kuuntelemassa porttia 22, mutta ssh-kokoonpanossa se määritettiin molemmille remote1 to remote2: lle porttiin 2222. Kyllä, tarkoitin ~/.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.
  • Ok. Ehdotan, että muokkaat kysymystäsi, lisäämällä, että voit, mutta et ole ' halukas, muokkaa -tiedostot. Sitten voit ssh yhdeksi etäkoneille ja antaa yksinkertaisen scp sieltä tai tehdä sen yhdessä rivissä jotain ssh -t -p <remote1 port> user1@remote1 'scp -P <remote2 port> user2@remote2:/source/path /dest/path'. Lisäksi ' sinun ei tarvitse muokata config -tiedostoja milloin tahansa: vain kerran kullekin parille isäntää (esim. Portin asettaminen yhteyden muodostaminen remote2 -palveluun osoitteessa remote1), mutta tietysti tämä voi olla sinulle epämukavaa, riippuen isäntiesi määrästä.
  • Kyllä, se vastaa kysymykseesi. " Ei " on vastaus ja on vastaus, ei väliä pidät siitä tai et.

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)

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *