Hogyan adható meg az SCP portja egy távoli kiszolgálóhoz?

Két távoli csomópontom van, amelyeket fájlokat próbálok egymásról küldeni.

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

~/ssh/config be van állítva a helyi gépemen, ezért alapértelmezés szerint a 2222 portot használja.

De a remote1 alapértelmezett ssh portja 22 -re van állítva az ssh config-ban a 2222 port helyett. Tehát, hogy bármilyen külső kapcsolat az ssh-n keresztül, alapértelmezés szerint a 22 portot használja.

Kipróbáltam a következőket, amelyek nem működtek:

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

Kipróbálta a következőket is, amelyek szintén nem működtek:

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

Mindkettőhöz a következő hibát kaptam:

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

Ez igaz, mivel a 10.0.1.10 a 2222 portot használja, és nem a 22.

Hogyan adhatom meg a remote1-et a 2222 port használatához, amikor fájlokat akarunk küldeni a következőhöz: (remote2) a következőtől: remote1?

Frissítés

Miután megpróbálta

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

Furcsa viselkedésem van. Annak ellenére, hogy a jelszavam helyes, a következő kimenetet adja:

[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: 

Még nem engedélyeztem a kulcs nélküli hitelesítést.

Új frissítés

Miután többféleképpen kipróbáltam, a szkriptjeimmel meg tudtam csinálni úgy, hogy bejelentkeztem a remote1-re az ssh-en keresztül a localhost-ról, majd az scp-re a remote1-ről a remote2-re. Ez azonban nem válaszol a kérdésemre. Azt terveztem, hogy közvetlenül a helyi gépemről fogom csinálni, majd két példány között továbbítok fájlokat, ami azt hiszem, hogy nem támogatott, ha két példány ssh démonja más portot használ, mint az alapértelmezett ssh kapcsolat.

Megjegyzések

  • stackoverflow.com/questions/10341032/… segíthet
  • Kipróbáltam azokat, amiket a kérdésemben említettem. Úgy tűnik, nem működött nálam
  • localhost hallgatta a 22. portot, de az ssh konfigurációban mindkét távoli1-től távoli2-ig megadta Igen, arra gondoltam, hogy ~/.ssh/config Az 1 távoli és távoli távoli alapértelmezett port a ~ / .ssh / config fájlban nem változik, így az alapértelmezett 22. portja szerkeszthető, de egyvonalas használatával szeretné megtenni, ahelyett, hogy minden egyes ssh-konfigurációt egyszerre szerkesztene.
  • Ok. Javaslom a kérdés szerkesztését, hozzátéve, hogy megteheti, de ' nem hajlandó módosítani a fájlok. Ezután ssh eggyé alakíthatja a távoli gazdagépeket, és onnan kiadhat egy egyszerű scp fájlt, vagy megteheti egy sorban valamivel, ssh -t -p <remote1 port> user1@remote1 'scp -P <remote2 port> user2@remote2:/source/path /dest/path'. Ezenkívül ' nem kell egyszerre szerkesztenie a config fájlokat: csak párszor minden gazda számára (pl. A port beállítása csatlakozás az remote2 csatornához a remote1 oldalon), de természetesen ettől kényelmetlen lehet, a gazdagépek számától függően.
  • Igen, ez megválaszolja a kérdésedet. " Nem " válasz válasz, és a válasz, nem számít, ha tetszik vagy nem.

Válasz

Ezt nem lehet megtenni egyszerű távoli-távoli scp-vel [1].

Ehelyett ssh az első távoli gazdagépre, és futtassa az scp-t egy port argumentummal onnan:

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

Ha pontosan azt szeretné megtenni, amit a scp, akkor a -n -x -oClearAllForwardings=yes beállításokat hozzáadhatja a ssh, bár erre általában nincs szükség.


[1]: A scp újabb verziói támogatják az uri specifikációt (beleértve a portot is) host:path helyett, de csak akkor, ha a -3 beállítást használja (“áthaladás a helyi gazdagépen”).

Tehát valószínűleg használhatja a következőt:

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

(vegye figyelembe, hogy a / a host[:port] nem része az útnak – a ./file -re fog hivatkozni a user” s saját könyvtárban).

De a localhoston keresztül történő másolás lassabb, és tapasztalatom szerint ez elrejti a hibákat. Például ez nem nyomtat ki hibaüzenetet annak ellenére, hogy nem tudott létrehozni /foo/bar/baz fájlt:

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

Nem jutottam ebbe a mélységbe – csak kerülgettem 😉


Ha valakit mindez nem győz meg, megnézheti a forráskód :

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

Vegye figyelembe, hogy a tport változó csak be van állítva egy scp:// uri elemzésével, és egyszerűen nem létezik a 7.6p1-nél régebbi verziókban (2017. okt.).

Megjegyzések

  • El tudnád magyarázni, mit csinál -x -oClearAllForwardings=yes ez a lehetőség a válaszodban? Arra is gondoltam, hogy megtehető-e a rsync használatával.
  • -x letiltja az X11 továbbítást és a -oClear.. letiltja az összes TCP továbbítást (ha bármelyiket rákényszerítették ~/.ssh/config vagy /etc/ssh/ssh_config)
  • @RakibFiha rsync azt mondja: " A forrás és a cél egyaránt nem lehet távoli ". Talán vannak trükkök körülötte, de ennek külön kérdésnek kell lennie.
  • Most a részletes magyarázatod után jöttem rá. (y)

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük