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.
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:
- zahrnúť adresár
.ssh
do projektu - 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.
27 odpovedí na “FTP je pasé, prejdite na RSYNC”
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… ?
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.
rsync nasa firma pouziva uz dlho na davkove kopirovanie (desiatky GB) 🙂 Detaily nepoznam, ale viem, ze si to u nas chlapci pochvaluju.
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..
Tak pardon 🙂 Uz som sa dostal k „expect“, takze ano, takto heslo nastavit ide 🙂
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.
Možnost nastavit SSH klíč bych taky bal. A hodil by se i GIT deployment… 🙂
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 🙂
A čo bezpečnosť? Pokiaľ viem, rsync nepodporuje SSL/TLS, prenášané dáta sú teda v plaintexte…
rsyncovat vies aj cez ssh a tam vsetky data tecu cez ssh tunel
Naskýta sa otázka, ako to má riešené WS.
Pokiaľ ale mám bežný webhosting u websupportu tak ssh tunel použiť nemôžem…
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.
Vďaka za update, teraz sa mi to už pozdáva 🙂
Nevim, jak v jinejch distrech ale na Debianu (a chorejch klonech) existuje pro nakopirovani certu na serveru zkratka a to „ssh-copy-id“
nj, ale bude to fungovat aj bez shellu? Na tych nasich FTPkach nesedi na druhej strane sshd.
Ne-e – to jede pres ssh. Sorka.
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.
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.
Existuje nejaky rsync plugin pre Netbeans ? Remote connection podporuju default len ftp , sftp 🙁
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 🙂
[…] ste viacerí videli parádny screencast od srigiho ako na prenos súborov cez RSYNC. Ku úplnej dokonalosti mi chýbala len jedna drobnosť […]
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 🙂
Ako som mohol doteraz bez tohto zit 🙂 Diky za tutorial srigi!
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
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
[…] 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 […]