Most az rsync kerül a terítékre, amelyet a samba alkotóinak köszönhetünk és talán nem olyan sokan ismernek.
Mire is jó az rsync? Sokmindenre, itt le van írva részletesen:) De elmondom, hogy én mire használom.
Van egy távoli szerverem, ahol napi szinten sok-sok fontos adat keletkezik, ezeket nem ártana menteni minél több helyre, ha esetleg történne valami… Így egyrészét ezeknek itthonra is lementem, nyugodtabban kelek, fekszek..:)
Két szerverről beszélünk, az egyik a távoli szerver, ahonnan az anyagokat szinkronizálni kell.
Másik a routerunk, amit egyszerűen asus-nak hívunk a leírás során.
Első lépés, hogy mindkét szerverre telepítsük fel az rsync csomagot, az asus-on ez így fog kinézni:
ipkg install rsync
Majd ezután root-ként a távoli szerveren létrehozunk egy felhasználót (esetünkben syncuser) valid login shell-el, később vele fogunk csatlakozni és elvégezni a szinkronizálást.
Valahogy így nézhet ki:
useradd -d /home/syncuser -m -s /bin/bash syncuser
Adjunk neki egy szupertitkos jelszót, amit azért jegyezzünk meg:
passwd syncuser
És most teszteljük le, hogy működik-e a dolog:
rsync -avz -e ssh syncuser@távoli szerver címe:/data/fontos_adat /opt/etc/samba/Share/sync
A távoli szerver címét cseréljük ki a helyesre, valamint azt a könyvtárat adjuk meg utána, ahol a szinkronizálandó adataink vannak. Majd ezt követi egy szóközzel elválasztva a cél, amit szintén ne felejtsünk el átírni.
Az eredménynek valami hasonlónak kell lennie, miután majd helyesen adtuk meg a jelszót, amit ugye pár sorral feljebb generáltunk:
Host ‘távoli szerver’ is not in the trusted hosts file.
(fingerprint md5 28:75:a6:09:b6:ce:b4:46:88:d8:3a:18:f5:6f:5c:ce)
Do you want to continue connecting? (y/n) y
syncuser@távoli szerver’s password:
receiving incremental file list
.
.
.
A folyamat végén ellenőrizheted, hogy tényleg megvannak a fájlok, ugyanannyi, ugyanakkora méretű, egy sem hiányzik.
Mindez szép és jó, de a neheze most jön, mert szeretnénk azt elérni, hogy teljesen automatikusan tegye mindenzt, mondjuk egy cron beiktatásával. Így észre sem veszed, mire felébredsz, ott van az asus-on mondjuk a napi mentés a távoli szerverről.
Tehát azt kell megoldanunk, hogy mikor ssh-val csatlakozik az asus a távoli szerverre, akkor ne kérje be a jelszót, s akkor már sinen van a dolog.
Ehez szükségünk lesz az openssh csomagra, szóval tegyük az asuson a következőket szép sorban:
mkdir /opt/etc/rsync
ipkg install openssh
ssh-keygen -t dsa -b 1024 -f /opt/etc/rsync/mirror-rsync-key
Az Enter passphrase (empty for no passphrase): és a Enter same passphrase again: résznél üssünk simán entert. Fontos hogy itt enter-t üssünk, egyébként emberi beavatkozás nélkül nem fog működni a dolog (és ugye pont ez a célunk).
Ezután a nyilvános kulcsunkat át kell másolnunk a távoli szerverre, melynek során adjuk majd meg a fentebb beállított jelszót:
scp /opt/etc/rsync/mirror-rsync-key.pub syncuser@távoli szerver címe:/home/syncuser/
Ezután a távoli szerver /home/syncuser könyvtárában ott az asus publikus kulcsa.
Következő lépésként be kell jelentkeznünk ssh-n a távoli szerverre, de fontos hogy ne root-ként, hanem a syncuser felhasználóval!
Majd adjuk szép sorban a következő parancsokat:
mkdir ~/.ssh
chmod 700 ~/.ssh
mv ~/mirror-rsync-key.pub ~/.ssh/
cd ~/.ssh
touch authorized_keys
chmod 600 authorized_keys
cat mirror-rsync-key.pub >> authorized_keys
Ezután:
vi /home/syncuser/.ssh/authorized_keys
Most ez egyenlőre valahogy így néz ki:
ssh-dss AAAAB3NzaC1kc3MAAACBAIm82xheaKQ3qLR4suau/zY5KZuBGNQhhXBhiJ959vedwqcJVOLprcMKpPSZdBWjyUcSKu1S944z+qQrSKsoGHWna5YsVFV1kVnMBSC8nZPhygq3ObLZJTf/nw+mali53HjYjmF5fhgFu2WDMwu27PqBvmXMVxMmaptL869CSvs5AAAAFQCKd9RfEPVYoUcQaDXqBh6UhQINpwAAAIBXDyCCopwjxa8vnF6FElMCrc6eJyvc2EEKSEyu3/UzzSZ5q3XIoAgFzveg1i/cIMu1WueU9FrQP97htJUFFwgYoY37Zabc7iz169eWB7vdlUYQ8TnnreupUzk2Roiz8L65eX4j8GAt3P3aTPkTxWdpAbVZzlrjigJSpMRkSfv+LgAAAIBY2HUe8RK6+SZPYb+xCfUcZht3mrfciqcWmrQItH9c7oL+tP+4PZdtQfpUfH0jVYHp0MGfdAXccBddPYUnr0jbNfDnyePeacnDcDPNqf9B0bWZG/y9RYHuJBI/jPaqBX9lj+K+OS7zIHF5RGIkCFZUJ3GSY/A4rHCHZ9WaFPTs6g== root@asus
Mi viszont csak az asus-ról szeretnénk engedélyezni a csatlakozást, és csak a sikeresen csatlakozott usernak akarjuk engedélyezni a szinkronizálást. Ennek érdekében módosítani kell a ezen a fájlon, az elejére illesszük be az alábbiakat (az asus helyére az íp címét, vagy domén címet adjunk):
command=”/home/syncuser/rsync/checkrsync”,from=”asus”,no-port-forwarding,no-X11-forwarding,no-pty
Tehát most valahogy így állunk:
command=”/home/syncuser/rsync/checkrsync”,from=”asus”,no-port-forwarding,no-X11-forwarding,no-pty ssh-dss AAAAB3NzaC1kc3MAAACBAIm82xheaKQ3qLR4suau/zY5KZuBGNQhhXBhiJ959vedwqcJVOLprcMKpPSZdBWjyUcSKu1S944z+qQrSKsoGHWna5YsVFV1kVnMBSC8nZPhygq3ObLZJTf/nw+mali53HjYjmF5fhgFu2WDMwu27PqBvmXMVxMmaptL869CSvs5AAAAFQCKd9RfEPVYoUcQaDXqBh6UhQINpwAAAIBXDyCCopwjxa8vnF6FElMCrc6eJyvc2EEKSEyu3/UzzSZ5q3XIoAgFzveg1i/cIMu1WueU9FrQP97htJUFFwgYoY37Zabc7iz169eWB7vdlUYQ8TnnreupUzk2Roiz8L65eX4j8GAt3P3aTPkTxWdpAbVZzlrjigJSpMRkSfv+LgAAAIBY2HUe8RK6+SZPYb+xCfUcZht3mrfciqcWmrQItH9c7oL+tP+4PZdtQfpUfH0jVYHp0MGfdAXccBddPYUnr0jbNfDnyePeacnDcDPNqf9B0bWZG/y9RYHuJBI/jPaqBX9lj+K+OS7zIHF5RGIkCFZUJ3GSY/A4rHCHZ9WaFPTs6g== root@asus
Most meg kell csinálnunk a scriptet, amire az előbb hivatkoztunk:
mkdir ~/rsync
vi ~/rsync/checkrsync
Majd illesszük be ezt a kódot:
#!/bin/sh
case “$SSH_ORIGINAL_COMMAND” in
*\&*)
echo “Rejected”
;;
*\(*)
echo “Rejected”
;;
*\{*)
echo “Rejected”
;;
*\;*)
echo “Rejected”
;;
*\< *)
echo “Rejected”
;;
*\`*)
echo “Rejected”
;;
rsync\ –server*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo “Rejected”
;;
esac
Állítsuk be a megfelelő jogosultságot:
chmod 700 ~/rsync/checkrsync
És most jött el a végső tesztelés ideje, most már nem kellene bekérnie a jelszót. És ez az, amit akartunk!
Adjunk ki az asus-on a következő parancsot a megfelelő értékek kicserélésével:
rsync -avz –delete -e “ssh -i /opt/etc/rsync/mirror-rsync-key” syncuser@távoli szerver címe:/data/fontos_adat /opt/etc/samba/Share/sync
Ennyi volt, nem volt nehéz, ugye?:)
Read original blog post