bezova_detail

FTP je pasé, prejdite na RSYNC


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. V nasledujúcom screencaste sa dozviete ako RSYNC začať používať na našich webserveroch.

nezabudnite si prepnúť na najvyššiu kvalitu videa

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.


Páčil sa Vám článok? Posuňte ho ďalej

26 komentárov

Pridaj niečo
  1. 1
    Filyp

    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… ?

  2. 2
    Marcel

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

  3. 3
    Brano

    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..

  4. 4
    Brano

    Tak pardon :) Uz som sa dostal k “expect”, takze ano, takto heslo nastavit ide :)

  5. 6
    backslash

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

  6. 7
    Martin Jantošovič

    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.

  7. 8
    Rasto

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

  8. 10
    Rasto

    Pokiaľ ale mám bežný webhosting u websupportu tak ssh tunel použiť nemôžem…

  9. 12
    Igor Hlina

    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.

  10. 13
    Igor Hlina

    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.

  11. 14
    starenka

    Nevim, jak v jinejch distrech ale na Debianu (a chorejch klonech) existuje pro nakopirovani certu na serveru zkratka a to “ssh-copy-id”

  12. 15
    Igor Hlina

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

  13. 17
    wmage

    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.

  14. 18
    Lubos

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

  15. 19
    mapass

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

  16. 21
    backslash

    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.

  17. 23
    Maroš Lukáč

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

  18. 26
    Stano

    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