Az Rsync alkalmazás a Linux rendszereken bevált módszer arra, hogy Távoli gépekre backupoljunk könyvtárstruktúrákat. az eljárás alapja az, hogy a két gép között mindig csak a fájlok közötti különbségek mennek át. Sajnos értelmes leírás magyarul, csak a Linuxos Rsync-re létezik, de elkészítették az RSync windowsos verzióját cwRsync, aminek itt van a honlapja: http://www.itefix.no
Néhány tudnivaló a cwRsync-ről:
- A Linuxos Cygwin könyvtáron alapul
- Kliens-szerver üzemmódban működik (kliens modul és szerver modul)
- OPEN SSH segítségével biztonságos kapcsolaton keresztül is működik
- célszerű a CopSSH modult használni hozzá.
Itt van egy angol nyelvű video tutorial. Ennek alapján itt írom le a telepítés menetét
Én a 4.0.4-es verziót teszteltem le, de később természetesen az újabb modulokat célszerű használni:
le kell tölteni a három modult:
CopSSH (3,3 MB) - letöltés innen - igazi letöltési hely a SourceForge-ról: Copssh_3.1.1_Installer.zip
cwRsyncServer - letöltés innen - igazi letöltési hely a Sourceforge-ról: cwRsyncServer_4.0.4_Installer.zip
cwRsync (Kliens) - letöltés innen - igazi letöltési hely a Sourceforge-ró: cwRsync_4.0.4_Installer.zip
Az alábbiakban a leírás szerint járj el. A vastagított részeket a saját környezetedre kell alkalmaznod! 64 bites rendszeren a C:\Program Files helyett a C:\Program Files (x86) könyvtár az alapértelmezett telepítési könyvtár.
A szerver telepítése (Host)
- Hozz létre egy usert vagy használj egy meglévő usert, aki a szerveren a továbbiakban kezeli a szervízeket. A példában ez lesz a szerviz user (A default telepítési user az SVCWRSYNC, amit célszerű mind a szerveren, mind a kiensen használni)
- Ha hálózati megosztást akarsz használni majd a backupolásra, akkor adj a megosztásra jogot a szerviz user részére. Általában adjál megfelelő írási és olvasási jogokat a backup tárolóhelyekre.
- Telepítsd a CopSSH klienst default módon. Ez létrehoz majd egy szolgáltatást a Windowson OpenSSH SSHD néven. A telepítés közben feltett érdésre add meg a korábban felvett usert, mint futtató klienst. Ennek a usernek el kell tudnia indítania ezt a szolgáltatást. C:\Program Files\ICW
- A szervíz usernek adj teljes jogot a telepítési könyvtárra. (C:\Program Files\ICW) Az alkönyvtárakra ne örökl?djön a jog.
- A telepÍtés végén állítsd le az OpenSSH SSHD szolgáltatást.
- Telepítsd a cwRsynServer-t default módon. Ugyanabba a könyvtárba fog települni, mint az előző alkalmazás, és felülírja az előzőleg telepített könyvtárak némelyikét.Default könyvtár: C:\Program Files\ICW, futtató user a fenti szerviz
- A szerviz usernek adj teljes jogot a "C:\Program Files\ICW\Bin" könyvtárra. Ne örökl?djenek a jogok az alkönyvtárakra.
- Indítsd el az OPENSSH SSHD szervízt és az RsyncServer szervízeket.
- Megjegyzések:
- A konfig fájlok módosítása után mind a két szolgáltatást újra kell indítani
- Érdemes automatikusan indulóra állítani a szolgáltatásokat
- Megjegyzések:
- Szerkesszük a konfigurációs fájlokat:
- C:\Program Files\ICW\etc\sshd_config fájl tartalmában az alábbi paramétereket állítsd át:
- Logleel INFO
- StrictModes no6. Indítsd el az OpenSSH szervízt és állítsd automatikusan indulóra.
- Módosítsd az alábbi fájlt: "C:\Program Files\ICWI\rsyncd.conf". Itt adhatod meg, hogy melyik fájlrendszerbeli meghajtóra backupoljon majd a kliens.Több backup célpontot is be lehet állítani. minden backup célpont egy [területnév] bejegyzéssel kezdődik, majd a terület leírásával folytatódik. A cygwin könyvtár sajátosságai miatt a C:\teszt könyvtárat így kell bejegyezni: /cygwin/c/teszt. Az alábbiakban lássunk egy példát egy konfig fájlra:
- C:\Program Files\ICW\etc\sshd_config fájl tartalmában az alábbi paramétereket állítsd át:
use chroot = false strict modes = false hosts allow = * log file = rsyncd.log # module definitions # Remember cygwin naming conventions : c:\work becomes /cygwin/c/work # [test] path = /cygdrive/h/Backup/teszt read only = false transfer logging = yes
Megjegyzések:
Ha szerver megosztást használsz a backup könyvtárnak akkor az rsyncd.conf-ban az alábbi módot használd:
path = //FS/megosztásnév/könyvtárnév/projekt
Ha lokális gépre mented a backupokat, akkor a cygwin csomagnál szokásos módon add meg az elérési utat:
path = /cygwin/D/könyvtárnév/projekt/.
ahol a D jelenti a D: meghajtót!!!!
A könyvtár végén lévő / jel számít, hogy ott van-e vagy nem! Ne legyen ott!
Példa: rsyncd.conf
use chroot = false strict modes = false hosts allow = * log file = rsyncd.log pid file = rsyncd.pid # module definitions # Remember cygwin naming conventions: c:\work becomes /cygwin/c/work # # this section matches to the "client" that will sync it's files [teszt] path = /cygwin/d/backup/teszt read only = false transfer logging = yes [teszt2] path = //FS/megosztás/teszt2 read only = false transfer logging = yes
Az rsyncd.conf teljes paraméterlistája
- Indítsuk el a Start Menü / Programok /COPSSH /Activate a user menüpontot
- Válasszuk ki a szerviz usert, majd tovább
- Írjuk be a passphrase-t kétszer. Ez egy hosszabb szöveg, ami lehetőleg ne legyen kitalálható, mint egy jól védett jelszó, ugyanakkor nincsenek rá megszorítások. Ennek segítségével létrejön majd a 2048 bit RSA nyilvános és a privát kulcs.
A kulcsok a C:\Program files\ICW\home\szerviz könyvtárakban jönnek létre. szerviz.key.pub a publikus és szerviz.key a privát.
Megjegyzések
- A szerverre később lehet hivatkozni IP címmel, lokális hálózaton NETBIOS névvel - ha működik a névfeloldás - , vagy domain névvel is. A domain név lehet akár dynamikus DNS-ből származó, mint például valami.homeip.net, vagy valós, mint például www.europr.hu
- A szerverre távolról csatlakozó képeknek el kell tudnia érni a szervert véd? tűzfalon keresztül bizonyos portokat, mint például a TCP 22, 837 (default esetben)
- Ha a szerver router mögött van, akko rbe kell állítani a megfelelő portforwardolást is a bElső hálón lévő gép IP címére is, tehát a routeren valószín?leg legalább két portot kell forwardolni.
A kliens telepítése (Client):
A kliens egy másik számítógépet jeletni, ahonnan indítjuk a feltöltést a szerverre. Itt is telepíteni kell először a kliens alkalmazást. cwRsync
- A telepítésnél default módot (SSH-val együtt) használva a C:\Program Files\cwRsync nevű könyvtár jön létre.
- Hozd létre a C:\Program Files\cwRsync\.ssh nevű könyvtárat.
- Nyiss egy parancssort és a PATH környezeti változóba tedd be a C:\Program Files\cwRsync\bin könyvtárat ideiglenesen.
path=%PATH%;"C:\Program Files\cwRsync\bin
- Lépj be az .ssh könyvtárba
cd .ssh
- Írd be az alábbi parancsot a parancssorba:
ssh-keygen -t rsa -b 2048 -N '' A feltett kérdésre add a választ: id_rsa
- Létrejött egy publikus és egy privát kulcsokból álló kulcspár. Az id_rsa nevű fájl a privát és az id_rsa.pub a publikus kulcs.
- A kliens id_rsa.pub fájljának tartalmát másold be a szerver C:\Program Files\ICW\home\fz\.ssh\authorized_keys nevű fájljába az ott lévő alá. (Ez a fájl akkor jött létre, amikor a szerveren aktiváltuk a usert!). Valami ilyesmit kell látnodezután a fájl tartalmában:
ssh-rsa AAAAB3NzaC1yc.... Administrator@Szervergep ssh-rsa AAAAB3NzaC1yc.... Rendszergazda@kliensgep
Természetesen ezek a bejegyzések nem az igaziak és 2048 karakter egy-egy sora!
Ha több klienst akarsz használni backupra, akkor minden egyes kliensnek létre kell hozni a publikus rsa kulcsát és ide bemásolni!
- Visszamegyünk a kliensre, és létrehozzuk a C:\Program Files\cwRsync\CheckSSH.cmd szövegfájlt. Ezzel teszteljük le a kapcsolatot és az Első kapcsolódáskor ekkor próbáljuk / küldjük át a jelszót a szervernek. Figyeljed meg, hogy az ssh paraméterénél a szerviz usert adtam meg, ami a szerveren futtatja a cwrsync szervert!
rem set homepath values SET HOMEDRIVE=%CD:~0,2% SET HOMEPATH=%CD:-3% SET CWRSYNCHOME=%CD% SET CWOLDPATH=%PATH% SET PATH=%CWRSYNCHOME%\BIN;%PATH; SET HOME=%CWRSYNCHOME%\%HOMEPATH% ssh -vvv szerviz@valami.homeip.net
- Ha tűzfalunk van, akkor a kapcsolódáskor felugorhat egy figyelmeztetés a kapcsolat létrejöttére és azt engedélyezni kell. Mivel ez SSH kapcsolat a szerveren a bejövő TCP 22-es porton kell engedélyezni a forgalmat!
SET PATH=%CWOLDPATH%
A futtatás közben felteszi a kérdést, hogy milyen passwordot adjunk meg. Azt a passwordot, amit a szerveren korábban beállítottunk, amikor létrehoztuk a szerviz usert! A parancs lefutása után a cygwin parancskörnyezetben marad a program.
- Kilépünk a logout paranccsal
- Ugyanebben a könyvtárban létrehozzuk a copyrsync.cmd nevű fájlt, amivel teszteljük, az rsync működését:
rem set homepath values SET HOMEDRIVE=%CD:~0,2% SET HOMEPATH=%CD:-3% SET CWRSYNCHOME=%CD% SET CWOLDPATH=%PATH% SET PATH=%CWRSYNCHOME%\BIN;%PATH; SET HOME=%CWRSYNCHOME%\%HOMEPATH% rsync -avrz --delete "/cygdrive/C/Program Files/cwRsync/doc" szerviz@valami.homeip.net::teszt SET PATH=%CWOLDPATH%
- Megjegyzés
- Figyelni kell arra, hogy a ::teszt szó ugyanaz legyen, mint a szerveren az rsyncd.conf-ban lévő [teszt]!
- A jelenlegi beállításoknál a doc könyvtár létrejön a szerver oldalon és a könyvtár tartalma átmegy!
- Ha minden ok, akkor pár másodperc után átmegy a szerverre a néhány fájl!
- Minden olyan backup könyvtárra, amit távolról hozunk létre a szerver ssh userének (aki futtatja az OPEN SSH-t és a rsync szervert) megfelelő create, írás és olvasási jogokat kell kiosztani.
- Olyan könyvtárakra ne adjunk jogokat a usernek, amihez nincsen köze, ugyanis ha a fenti sort az alábbira cseréljük és a könyvtár létezik a szervern, akkor bizony írni tudunk bele!
- célszerű a továbbiakban inkább pontos elérési utat megadni a futtatható programoknál, illetve a megadott könyvtárba léptetni a parancsfeldolgozót
rsync -avrz --delete "/cygdrive/C/Program Files/cwRsync/doc" szerviz@valami.homeip.net:/cygwin/c/teszt2
- Harmadik lépésként bebújtatjuk a forgalmunkat SSH tunnelbe, ezáltal biztonságos lesz és a kapcsolatfelvétel is megfelelő. A protokollbújtatást a sechaw.exe hajtja végre, amelynek a működéséhez néhány környezeti változót be kell állítani. A script neve mondjuk legyen backup.cmd
SET SECHAW_IDENTITY="C:\Program Files\cwRsync\.ssh\id_rsa" SET SECHAW_TYPE=ssh SET SECHAW_LOCALPORT=9119 SET SECHAW_SERVER=valami.homeip.net SET SECHAW_SERVERPORT=873 SET SECHAW_USER=SvcwRsync SET SECHAW_CMD="C:\Program Files\cwRsync\bin\rsync.exe" -arz --progress --stats --exclude-from=exclude.txt --log-file=SyncLog.txt --ignore-errors --force "/cygdrive/c/doc" %SECHAW_SERVER%::teszt SET SECHAW_TUNNEL=ssh -i "C:\Program Files\cwRsync\.ssh\id_rsa" -L 9119:%SECHAW_SERVER%:873 %SECHAW_USER%@%SECHAW_SERVER% -T -N "C:\Program Files\cwRsync\bin\sechaw.exe" --verbose
A backup során előfordulhat, bizonyos fájlokat nem szeretnénk átmásolni (pl. ISO, mp3, AVI, stb...). A kihagyandó fájlok leírását az--exclude-from=exclude.txt paraméterrel adhatjuk meg. A fájlnevet persze módosíthatjuk.
Példa exclude.txt fájlra
*.avi, *.ISO *.bak *.~* *.err *.gho *.tmp *.temp
Megjegyzések
- Tesztelj, mielőtt élesben mennél. A szerveren létrejött fájlok tulajdonosa a szerviz user lesz.
- A kliens oldalon készíts egy Ütemezett feladatot, ami rendszeresen indítja a backupot
Start menü / Vezérlőpult / Ütemezett feladatok - Ha nincs elég sávszélességed, akkor használj a sávszélesség limitet(pl. -bwlimit=30).
- A szerver oldali törlés kínos lehet, ezért a --delete kapcsolót csak akkor használd, ha biztos vagy a dolgodban
Az Rsync főbb paraméterei. A teljes lista itt található
-v, --verbose Üzenetek olvashatók -q, --quiet A hibaüzeneteken kívül nem jelenik meg semmi -c, --checksum checksum alapján lépi át a fájlokat -a, --archive Archive mód -r, --recursive rekurzívan a könyvtárakat másolja -R, --relative Relatív útvonalakat használ -b, --backup Bakcupot készít a régi fájlokról -u, --update Csak az újabb fájlokat másolja át --append Hozáf?zi az adatokat a rövidebb fájlokhoz -p, --perms jogosultságokkal együtt másol -t, --times A módosítás időpontját meg?rzi -O, --omit-dir-times a könyvtárak idejét nem módosítja -n, --dry-run Teszt futtatás --remove-source-files A másolt fájlok törlése kliens oldaon --delete A szerver oldalon törli a kliens oldalról hiányzó fájlokat (tükrözés!) --ignore-errors IO error esetén is töröl a szerver oldalon --force Üres könyvtárt is töröl --partial A részben átmásolt fájlokat megtartja -z, --compress tömörítés az adatátvitel közben --exclude-from=FIle másolás alli kizárások listája egy fájlból A fájl szerkezete: egy sor egy definíció. --files-from=FIle read list of source-file names from FIle --stats Statisztika --progress Olvasható kimenet az átvitel alatt --log-file=FIle A log fájl helye --password-file=FIle A szerver démon jelszó fájlja --bwlimit=KBPS Sávszélesség limit: KBytes /sec, pl -bwlimit=20 (ez 20 kb/sec -et jelent)
Az Rsync működése vázlatosan
1. Az RSync klines oldala felveszi a kapcsolatot a szerver oldallal, létrejön a kapcsolat.
2. A kliens oldal összeállítja a küldendő fájlok listáját. Az összeállítás során menet közben ezt a listát átküldi a szervernek.
3. Miután készen van a lista, a klines és a szerver is rendezi a listában lévő elemeket, majd a szerver megállapítja, hogy melyek a módosítandó, törlendő és hozzáadandó fájlok.
4. A fájlokat méretük alapján alapján csomagokra bonja a szerver és a kliens is, és a különbségi csomagokat küldi csak át a kliens a szervernek. (Ez persze leggyakrabban a teljes fájlt jelenti)
A működés teljes leírását itt olvashatjuk.
A cwrsync szerver használata router/tűzfal mögött
Ha a szerver tűzfal mögött van, akkor a tűzfalon meg kell nyitni a 873-as TCP portot és át kell irányítani a megfelelő bElső hálózati gépre.
Ha a kliens van tűzfal mögött, akkor a kimen? forgalmat kell engedélyezni a külső 873-as címre. A fenti példában a 9119-es portot használja a kliens gép, tehát ezt kell a tűzfalon a kifelé men? forgalomra engedélyezni.
A Sechaw (=Security Chanel Wrapper) paraméterezése és környezeti változói
(Én és minden épesz? rendszergazda a környezeti változókat használja)
-i, -identity Annak a fájlnak a neve, és elérési útja, ahol az rsa privát kulcsa található Környezeti változó: SECHAW_IDENTITY -t, -type Az adatátvitel típusa, lehet ssh vagy plink Környezeti változó: SECHAW_TYPE -l, -localpor A helyi port címe. A mi esetünkben 9119, de a default 8730 Környezeti változó: SECHAW_LOCALPORT -h, -host A távoli szerver neve, IP címe Környezeti változó: SECHAW_SERVER -r, -remoteport A távoli szerver port címe (rsync esetén a default 873) Környezeti változó: SECHAW_SERVERPORT -u, -user A távoli gépen alkalmazott user (cwrsync esetén az SvcRSync) Környezeti változó: SECHAW_USER -c, -command A lokális gépen futtatandó parancs. (Mi az rSync-et futtatjuk a lokális gépen) Környezeti változó: SECHAW_CMD -t, -tunnel A biztonságos csatornához kiadandó parancs Környezeti változó: SECHAW_TUNNEL