Kategórie
Technológie Tipy a triky

FTP je pasé, prejdite na RSYNC

Doba čítania: 4 min.

Zastaralý protokol FTP je dodnes najvyužívanejší spôsob prenosu súborov alebo celých projektov na naše webservery. Tie však podporujú aj výrazne efektívnejší protokol RSYNC, ktorý prenáša iba zmenené súbory a podporuje kompresiu. Pripravili sme pre vás screencast, v ktorom sa RSYNC naučíte využívať.

Protokol RSYNC slúži na pohodlný prenos súborov z jedného alebo viacerých zdrojov (SRC) do cieľového umiestnenia (DEST). Prenos sa môže uskutočniť v rámci jedného stroja, alebo (čo nás viac zaujíma) je možné súbory prenášať aj medzi dvoma oddelenými strojmi prepojenými pomocou siete.

UPDATE: Na konci článku nájdete krátky návod ako k autentifikácii využiť SSH kľúče.

Webservery Websupportu podporujú príchodzie spojenia protokolu RSYNC a po úspešnom autentifikovaní je možné zahájiť prenos. Najväčšou výhodou protokolu RSYNC je, že sa vždy prenášajú iba zmenené súbory a dokonca je možné počas prenosu zapnúť kompresiu.

Detailný popis programu rsync nájdete v manuálovej stránke. Najdôležitejší je spôsob volania rsync pre náše účely je s DEST v tvare vzdialeného stroja:

rsync [OPTION...] SRC USER@HOST:DEST

Spomedzi dostupných prepínačov (OPTION) sú najdôležitejšie (niektoré prepínače je možné zapísať v skrátenej forme, sú uvedené pre dlhou formou):

-v, --verbose           zvýši mieru výpisov do konzole počas behu rsync
-a, --archive           zachovanie oprávnení, vlastníka, skupiny a časov prenášaných súborov
    --exclude=PATTERN   neprenášaj súbory ktoré odpovedajú PATTERN
    --delete            zmaž v DEST súbory ktoré sa nevyskytujú na strane SRC
    --delete-excluded   tiež v DEST zmaž súbory ktoré sú označené ako `excluded`
    --delete-after      operácia zmazanie prebehne až po prenose zmien, nie pred
-n, --dry-run           nevykonaj živú operáciu, iba ukáž čo sa bude vykonávať
    --progress          zobraz priebeh operácie
    --stats             na konci zobraz užitočné informácie o prenose
-z, --compress          komprimuj súbory počas prenosu

Využitie SSH kľúčov k autetifikácii užívateľa

V screencaste sme výzvu na heslo obišli pomocou prográmku expect. V najlepšom prípade je však možné toto riešenie nazvať workaround. Skôr to však pripomína škrabanie sa za ľavým uchom pravou rukou. Admini mi však včera prezradili, že k FTP účtom je možné sa prihlásiť aj pomocou klasickej metódy pomocou verejného SSH kľúča.

krok #1 – vygenerovanie SSH kľúčov

Ak ešte nemáte vygenerovaný vlastný pár SSH kľúčov, zadajte do konzole príkaz

ssh-keygen -t rsa -C "VAS@EMAIL.SK"

Prepínačom -t zvolíte typ vygenerovaných kľúčov. RSA je najbezpečnejšou dostupnou voľbou. Prepínač -C nastavuje komentár (je možné ho nájsť na konci verejného kľúča). Komentár umožní ľahšie identifikovať jednotlivé kľúče.

Po odoslaní príkazu sa program opýta na na cestu kam súbory s kľúčmi uložiť. Postačí potvrdiť defaultné nastavenie. Následne sa opýta na heslo, ktorým sa kľúče zašifrujú. Kľúče môžete na disk uložiť aj nešifrovane, ale nie je to najmúdrejšia voľba. Doporučujem zadať silné heslo (passphrase). Po tomto kroku sú kľúče vygenerované do adresára .ssh vo vašom domovskom adresári.

krok #2 – nahranie verejného kľúča na webserver

Pripojte sa pomocou FTP klienta do žiadaného FTP účtu a vytvorte v hlavej zložke adresár .ssh (áno na začiatku je bodka). Do tohto adresára nahrajte súbor z vášho disku .ssh/id_rsa.pub a premenujte ho na authorized_keys. Tento súbor musí obsahovať zoznam verejných kľúčov, ktoré sú oprávnené prihlásiť sa k danému FTP kontu. Vďaka postupu s premenovaním, uložíte do authorized_keys ako prvý váš vlastný verejný ssh kľúč.V súbore môže byť viac verejných kľúčov, na každom riadku jeden. Je dôležité aby ste jednotlivé verejné kľúče uložili bez zalomenia (ako jeden dlhotánsky riadok)!

krok #3 – vylúčenie adresára .ssh z procesu rsync

Keďže sa adresár .ssh nachádza na serveri v zložke s projektom, rsync ho bude počas prenosu posudzovať ako bežný adresár. A keďže tento adresár nie je súčasťou projektu na lokálnej strane, rsync ho vďaka prepínaču --delete vymaže zo vzdialenej strany.

Sú preto dve možnosti:

  1. zahrnúť adresár .ssh do projektu
  2. ochrániť adresár pred zmazaním pomocou prepínača --filter

Druhá možnosť je systémovejšia, doporučujem použiť túto. Ukážku fungovania prepínača --filter nájdete v screencaste. Po pridaní filtra na adresár .ssh je už možné vymazať skript scripts/transfer.exp a využivať iba samotný scripts/rsync.sh

Celý projekt a jeho aktualizované zdrojové kódy, ktoré ste videli na screencaste si môžete prezrieť v našom github repozitári.

27 odpovedí na “FTP je pasé, prejdite na RSYNC”

dalo by sa na windowse spravit tak ako vo winscp, ze ulozim subor v editore a on sa automaticky uploadne na server?
a je na rsync gui browser ako totcmd/winscp/filezilla… ?

Ku Windows neviem dat moc uzitocnych info. V linuxe ide tzv. namountovat FTP ucet do lokalneho adresara (pouziva sa k tomu sshfs, vid update clanku).

Ak by sa toto dalo zariadit aj na Win (pomocou nejakej appky), dosiahol by si rovnaky vysledok – editoval by si server zdrojaky, ktore su namountovane v adresari na devel stroji.

rsync nasa firma pouziva uz dlho na davkove kopirovanie (desiatky GB) 🙂 Detaily nepoznam, ale viem, ze si to u nas chlapci pochvaluju.

Navod pekny. rsync u vas pouzivam, je to super na zalohy hlavne..
Bolo by fajn, keby som niekde mohol nahrat muj public ssh kluc, nech nemusim zadavat heslo (a mohol si zalohy robit CRONom)..

Len jedna vytka: Ked robite video o rsync, prislo mi tam strasne vela zbytocneho. Vytvaranie subdomen, pripajanie na FTP a neviem co vsetko, je trocha doplusu a video ma 40 minut a ked niekoho zaujima len rsync, tak to ani nenajde..

Vygeneruj si ssh klúč a do koreňového adresára na FTP (vedľa „web“, „sub“ a „logs“) vytvor adresár „.ssh“. Do neho pridaj súbor „authorized_keys“ a skopíruj do neho public key.

Potom môžeš používať aj CRON.

Rsync je super vec, podporuje aj tzv. sparse-files, takže keď napríklad pri prenose imidžov virtuálnych strojov nezaťažuje sieť prenosom voľného miesta. Na backup odporúčam nadstavbu rdiff-backup.
A expect napojený na databázu nám vo firme vypína porty odpojených zákazníkov, pridáva description na porty a robí hromadnú konfiguráciu switchov. A zatiaľ čo si expect klepká, admin kávičkuje 🙂

A čo bezpečnosť? Pokiaľ viem, rsync nepodporuje SSL/TLS, prenášané dáta sú teda v plaintexte…

U WS nie je k FTP uctom dostupny shell. Ale RSYNC daemon ako aj sshfs (prave som to odskusal, sshfs ide) bezi uz WS cez ssh tunel a tak nie je problem ich vyuzivat – vid. update clanku.

nj, ale bude to fungovat aj bez shellu? Na tych nasich FTPkach nesedi na druhej strane sshd.

99% ludi, co pouziva FTP pouziva Windows, skoda, ze autor k W nevie „dat moc uzitocnych info.“

Bolo by skvele, keby si niekto dal namahu, vyskusal si to na Windowse, a urobil videocast na tento styl.

Jednou z možností ako vyskúšať rsync pod Windowsom je nainštalovať si Gygwin. Ale to je dosť veľký kanón na vrabce. Ja som si včera vyskúšal DeltaCopy, je to vlastne rsync s GUI nadstavbou, ale v programovom adresári nájdeš aj klasický CLI exáč. Funguje v pohodke.

Existuje nejaky rsync plugin pre Netbeans ? Remote connection podporuju default len ftp , sftp 🙁

Zaujímavý screencast. Rsync som vôbec nepoznal, podobne ako aj expect, takže v blízkej dobe sa budem mať čím baviť. To zrýchlenie mi pripadá až rozprávkovo, pretože prenos veľkého objemu dát cez FTP je neuveriteľná otrava. Vďaka autorovi ako aj celému WS za good job. Nech sa darí a podobných (zaujimavých a kvalitných) článkov/screencastov pribúda 🙂

Zdravim, chcem sa opýtať, ako vymažem prazdne složky pomocou rsync … napr mam jednu složku v ktorej su stovky inych složiek, takže chcem spomedzi nich vymazať prázdne složky jednym príkazom 🙂

Zdravím, vie mi niekto poradiť? Keď sťahujem subory zo websupport serveru cez rsync v Kubuntu tak mi to ide ale keď chcem nahrať celú zložku na server píše mi chybu „error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.0]“ Dik za rady

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *