FTP je pasé, prejdite na RSYNC


  • Zdieľať na Google+

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.

Komentáre

  • Filyp
    Odpovedať
    Autor
    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… ?

    • Igor Hlina
      Odpovedať
      Autor
      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.

  • Marcel
    Odpovedať
    Autor
    Marcel

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

  • Brano
    Odpovedať
    Autor
    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..

    • Brano
      Odpovedať
      Autor
      Brano

      Tak pardon 🙂 Uz som sa dostal k „expect“, takze ano, takto heslo nastavit ide 🙂

      • Martin Jantošovič
        Odpovedať
        Autor
        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.

  • Patrik Votoček
    Odpovedať
    Autor
    Patrik Votoček

    Možnost nastavit SSH klíč bych taky bal. A hodil by se i GIT deployment… 🙂

  • backslash
    Odpovedať
    Autor
    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 🙂

  • Rasto
    Odpovedať
    Autor
    Rasto

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

    • aksdfhka;sdfh
      Odpovedať
      Autor
      aksdfhka;sdfh

      rsyncovat vies aj cez ssh a tam vsetky data tecu cez ssh tunel

      • backslash
        Odpovedať
        Autor
        backslash

        Naskýta sa otázka, ako to má riešené WS.

  • Rasto
    Odpovedať
    Autor
    Rasto

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

    • Igor Hlina
      Odpovedať
      Autor
      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.

      • Rasto
        Odpovedať
        Autor
        Rasto

        Vďaka za update, teraz sa mi to už pozdáva 🙂

  • starenka
    Odpovedať
    Autor
    starenka

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

    • Igor Hlina
      Odpovedať
      Autor
      Igor Hlina

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

      • starenka
        Odpovedať
        Autor
        starenka

        Ne-e – to jede pres ssh. Sorka.

  • wmage
    Odpovedať
    Autor
    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.

    • backslash
      Odpovedať
      Autor
      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.

  • Lubos
    Odpovedať
    Autor
    Lubos

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

  • mapass
    Odpovedať
    Autor
    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 🙂

  • RSYNC a Sublime Text 2 | MPCA's blog
    Odpovedať
    Autor
    RSYNC a Sublime Text 2 | MPCA's blog

    […] ste viacerí videli parádny screencast od srigiho ako na prenos súborov cez RSYNC. Ku úplnej dokonalosti mi chýbala len jedna drobnosť […]

  • Maroš Lukáč
    Odpovedať
    Autor
    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 🙂

  • depi
    Odpovedať
    Autor
    depi

    Ako som mohol doteraz bez tohto zit 🙂 Diky za tutorial srigi!

  • mikaelz
    Odpovedať
    Autor
    mikaelz

    Dlho som maturoval ako si poriesit backup. Rsync som pouzival sem-tam, ale dosiel cas a spravil som si script. Je mozne sa pripojit cez FTP (vyzaduje heslo), to sa da obist spominanym `expect` alebo ak cez poskytovany shell pristup.

    https://raw.github.com/mikaelz/bin/master/backup.sh

  • Stano
    Odpovedať
    Autor
    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

  • Nepoužívate SSHFS? Mali by ste. – WebSupport blog
    Odpovedať
    Autor
    Nepoužívate SSHFS? Mali by ste. – WebSupport blog

    […] ako môžete úplne jednoducho pracovať s týmito systémami u nás. Na srigiho článok o RSYNC nepriamo nadviazal svojím blogpostom Vlado Kriška. Píše v ňom o SSHFS a jeho možnosti […]