FTP je pasé, přejděte na RSYNC


  • Share on Google+

Zastaralý protokol FTP je dodnes nejvyužívanější způsob přenosu souborů nebo celých projektů na naše webservery. Ty přitom podporují i výrazně efektivnější protokol RSYNC, který přenáší pouze změněné soubory a podporuje kompresi. Připravili jsme pro vás screencast, ve kterém se RSYNC naučíte používat

Protokol RSYNC slouží k pohodlnému přenosu souborů z jednoho nebo více zdrojů (SRC) do cílového umístění (DEST). Přenos se může uskutečnit v rámci jednoho stroje, nebo (a to nás zajímá v tuto chvíli víc) umožňuje přenášet i mezi dvěma různými stroji, spojenými pomocí sítě.

UPDATE: Na konci článku najdete krátký návod, jak k autentizaci využít SSH klíče.

Info o podpoře RSYNC na webserveroch Websupport

Webservery Websupportu podporují příchozí spojení protokolu RSYNC, a po úspěšné autentizaci je možné začít přenos. Největší výhodou protokolu RSYNC je, že se vždy přenášejí pouze změněné soubory, a dokonce můžete i pro přenos zapnout kompresi dat. V následujícím screencastu se dozvíte, jak RSYNC začít používat na našich serverech.

Nezapomeňte si zapnout nejvyšší kvalitu videa

Detailní popis ovládání programu rsync najdete v manuálové stránce. Pro naše účely je nejdůležitější volání rsync ve tvaru s DEST jako vzdáleným strojem:

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

Mezi dostupnými volbami (OPTION) jsou nejdůležitější tyto (některé lze zapsat i ve zkráceném tvaru, ten uvádíme před plným):

-v, --verbose           výstupy z běhu rsync, které jsou vypisovány
                        do konzole, budou podrobnější
-a, --archive           zachová oprávnění, vlastníka, skupiny a časy
                        přenášených souborů
    --exclude=PATTERN   nepřenáší soubory, jejichž název odpovídá
                        vzorku PATTERN
    --delete            v DEST smaže ty soubory, které nejsou v SRC
    --delete-excluded   v DEST smaže i soubory, které jsou označeny
                        jako `excluded`
    --delete-after      mazání proběhne až po přenosu změn, ne před
-n, --dry-run           žádné soubory se nepřenáší ani nemaží, jen
                        se ukáže, které by se přenášely a mazaly
    --progress          zobrazuje průběh operace
    --stats             na konci zobrazí užitečné informace o přenosu
-z, --compress          komprimuj soubory během přenosu

Využití SSH klíčů k autentizaci uživatele

V screencastu jsme výzvu na heslo obešli pomocí programu expect. Takové řešení není systematické a lze jej přinejlepším označit za workaround. Spíš to ale připomíná škrábání pravou rukou za levým uchem. Admini mi ale včera prozradili, že k FTP účtům je možné se připojit i běžnou metodou pomocí veřejného SSH klíče.

krok #1 – vygenerování SSH klíčů

Pokud ještě nemáte vygenerovaný vlastní pár SSH klíčů, zadejte do konzole příkaz

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

Volbou -t zvolítte typ vygenerovaných klíčů. RSA je nejbezpečnější dostupnou volbou. Přepínač -C určuje komentář (najdete jej na konci veřejného klíče). Komentář slouží ke snazší identifikaci klíčů.

Po odeslání příkazu se program zeptá na cestu, kam soubory s klíči uložit. Stačí potvrdit výchozí nastavení. Dále se zeptá na heslo, kterým se klíče zašifrují. Klíče můžete na disk uložit i nezaheslované, ale není to nejmoudřejší volba. Doporučuji zadat silné heslo (passphrase). Po tomto kroku jsou klíče vygenerovány do vašeho domovského adresáře (pokud jste nezadali jinou cestu).

krok #2 – nahrání veřejného klíče na webserver

Připojte se pomocí FTP ke svému účtu a vytvořtye v hlavním adresáři podadresář .ssh (áno na začiatku je bodka).Do tohoto adresáře nahrajte z vašeho disku (z místa, kam byl v předchozím kroku vygenerován) soubor s názvem .ssh/id_rsa.pub a přejmenujte ho na authorized_keys. Tento soubor obsahuje seznam veřejných klíčů, které jsou oprávněné se připojit k danému FTP kontu. Díky tomuto postupu máte v authorized_keys rovnou první veřejný klíč (pokud byste chtěli přidat další, nemůžete soubor přejmenovat, musíte nový klíč zapsat na další řádek). Je důležité, aby klíče v souboru authorized_keysbyly zapsané bez zalomení, tedy opravdu jeden klíč na jeden (dlouhý) řádek!

krok #3 – vyloučení adresáře .ssh z procesu rsync

Protože se adresář .ssh nachází na serveru ve složce projektu, bude ho rsync během přenosu považovat za normální adresář. Pokud zapnete přepínač --delete, tak jej rsync vymaže (ve zdrojovém projektu tento adresář nenajde).

Jsou dvě možnosti:

  1. přidat adresář .ssh do projektu i na pracovní stanici
  2. ochránit adresář před smazáním pomocí přepínače --filter

Druhá možnost je systémovější, doporučuji používat tu. Ukázku fungování přepínače --filter ajdete ve screencastu. Po přidání filtru na adresář .ssh je už možné vymazat soubor scripts/transfer.exp a používat jen samotný skript scripts/rsync.sh

Celý projekt a jeho aktualizované zdrojové kódy, které jste viděli ve screencastu, si můžete prohlédnout v našem github repozitáři.

  • Instalace SSFHS na Linux server
    Author
    Instalace SSFHS na Linux server

    […] Abychom se však do budoucna vyhli opakovanému zadávání hesla, použijeme návod z blogpostu o RSYNC. Pro zjednodušení ho vložíme i […]

  • mcmiazga
    Author
    mcmiazga

    Skvele Srigi perfektne!!!

  • radoslavius
    Author
    radoslavius

    Dobry den,
    plati toto stale i pro the hosting? Nedari se mi pripojit. Koncim s hlaskou:
    rsync: connection unexpectedly closed (0 bytes received so far) [sender]
    rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.0]
    Diky
    Radek

Napsat komentář