Rsync rsync nélkül?

 ( plt | 2019. szeptember 23., hétfő - 7:45 )

Egy olyan távoli szerverre kell fejlesztenem, aminek csak sftp és scp hozzáférése van, az rsync nem elérhető.
Mivel eddig mindig rsync-et használtam, próbáltam valami hasonlót keresni ilyen környezetre, de nem találtam. A legjobb, amit jelenleg meg tudok csinálni, hogy sshfs-sel felcsatlakoztatom a tárterületet, és erre már helyben mehet az rsync. De ez nehézkesebb is, lassabb is, nem is olyan szép.
Tudtok sftp/scp környeztre valami parancssoros közvetlen rsync szerű megoldást?

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Annyit megpróbálhatsz, hogy a saját gépedről az rsync binárist felmásolod a távoli home-odba, és az rsync-nek megadod az --rsync-path=~/rsync paramétert.
Elméletileg működik.
Bár ez sem elegáns... :)

---
"A megoldásra kell koncentrálni nem a problémára."

A távoli géphez nincs shell szintű hozzáférés. Az sftp és scp kapcsolatot is a proftpd biztosítja chroot-olva. Sajnos nem tudja az rsync-et kezelni.
...
Közben felfogtam, hogy nem is kell shell hozzáférés. Felmásoltam, de egyelőre nem működik:

exec request failed on channel 0
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: unexplained error (code 255) at io.c(235) [Receiver=3.1.2]

Gondolom, a chroot miatt.

Végül is mondtam, hogy "elméletileg". :)
Valóban a chroot lehet az akadály...

Nem próbáltad megvesztegetni az üzemeltetőt? Hátha... :)

---
"A megoldásra kell koncentrálni nem a problémára."

+1
Van mirror lehetőség is (példák pl. itt).

Igen, közben én is kipróbáltam, és működik.
Fura a paraméterezése. Például, ha helyi gépen akarok szinkronizálni, akkor a -c, de ha távolin, akkor a -e után kell a parancsot megadnom. A parancs végi quit sem volt triviális nekem.
A publikus kulcsot is kezeli szépen, ha a -u felhasználóneve után a "," karaktert kiteszem.
Összességében tudja az alap dolgokat, egyelőre nekem ez tökéletes lesz, köszönöm!
Felszinkronizálás távoli szerverre:

lftp -e "mirror -R --delete --parallel=5 $LOCALDIR $REMOTEDIR; quit" -u $USERNAME, sftp://$HOST

Szinkronizálás helyi gépre:

lftp -e "mirror --delete --parallel=5 $REMOTEDIR $LOCALDIR; quit" -u $USERNAME, sftp://$HOST

Tudja még az --exclude paramétert is, én ezt még nem használom.

Esetleg praktikus lehet egy "szkriptfájl", amiben az lftp-parancsok vannak, ui. a cat lftpparancsok | lftp működik.

Igen, valószínűleg ez esetben a quit is természetesebb lett volna nekem is.

Hm, abban a két lftp-szkriptben, amit használok, nincs quit - de vakuljak meg, a man lftp-ben nem is találok ilyen parancsot.

Gondolom azért, mert az egy standard ftp parancs. De lehet, hogy az EOF automatán meg is szakítja az ftp folyamatot, és akkor a scriptbe nem is kell.

Az is lehet. Viszont:

Idézet:
ftp:use-quit (boolean)
if true, lftp sends QUIT before disconnecting from ftp server. Default is true.