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.
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_keys
byly 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:
- přidat adresář .ssh do projektu i na pracovní stanici
- 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.
3 reakce na „FTP je pasé, přejděte na RSYNC“
[…] 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 […]
Skvele Srigi perfektne!!!
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