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