====== Script per il backup sicuro tramite Rsync e Openssh ====== Autori: **//Fabio Di Matteo//** \\ Ultima revisione: **//31/10/2009//** \\ \\ L'idea di questo script nasce dall'esigenza di dover allestire un servizio di **backup centralizzato**, **incrementale** e **sicuro** all'interno di una rete medio-piccola. Evitando di dover installare soluzioni personalizzate in ogni macchina, avendo il vantaggio che ad ogni aggiornamento del software non si debbano aggiornare tutte le copie. \\ ===== Obiettivi ===== Possiamo quindi elencare estesamente gli obbiettivi dello script come segue : - backup incrementale (tramite rsync); - backup sicuro (tramite tunnel ssh); - creazione di dettagliati file di log per utente contenenti informazioni su ogni transazione di file (tramite rsync); - backup automatizzato (utilizza un db mysql per prendere i riferimenti agli host di cui fare i backup); - lo script verra' scritto in PHP (CLI) ; - nessuna personalizzazzione installata sulle macchine della lan; - lo script deve risiedere interamente ed esclusivamente sul fileserver che conterra' i backup; ===== Strumenti ===== Per quanto riguarda le macchine nella lan (dalle quali si fara' il backup) e' sufficiente che siano installati **rsync** e **ssh** , su Debian e Ubuntu con: apt-get install ssh rsync Sulla macchina in cui risiedera' lo script invece e' necessario anche installare l'interprete da riga di comando del PHP, in quanto scriveremo lo script in php e [[http://sourceforge.net/projects/sshpass/|sshpass]] grazie al quale e' possibile passare la password per i servizi ssh in maniera non interattiva, ovvero e' possibile passare la password tramite linea di comando.. apt-get install php5-cli sshpass Inoltre per comodita' useremo la classe database di Gianluca Giusti (http://www.urcanet.it/brdp/php_manual/html/brdp9.html#title56) per interagire con la nostra tabella mysql. ===== Il principio di funzionamento ===== Tenuto conto dell'articolo [[http://www.freemedialab.org/wiki/doku.php?id=rete:usare_ssh_in_modo_non_interattivo|Usare ssh in modo non interattivo]] possiamo certamente dire che l'istruzione principale e' la seguente: sshpass -p rsync –progress --log-file= -avz -e ssh @: Il db mysql contiene una tabella chiamata ''tbl_personale'' con i campi: ^campi^ |so| |ip| |user| |rootpass| ===== Sorgente ===== **ersukup** #!/usr/bin/php connetti(); $sql="select * from tbl_personale where so like '%linux%' "; if ($db->esegui($sql)){ for($i=0; $i<$db->righe(); $i++){ $cmd="sshpass -p ".$db->leggi($i,"rootpass"). " rsync -L --delete --progress --log-file=/var/log/ersukup/". $db->leggi($i,"user").".log -avz -e ssh root@". $db->leggi($i,"ip").":/home/".$db->leggi($i,"user")."/Documenti /home/".$db->leggi($i,"user"); if ($db->leggi($i,"user")!="" && $db->leggi($i,"rootpass")!="") { echo "\n\n\n\nbackup utente --> ". $db->leggi($i,"user")." (". $db->leggi($i,"ip").")\n\n" ; system($cmd); } } echo "Procedura di backup terminata. \n"; }else{ //problemi nell'interrogare la base dati echo "Problemi nell'interrogare la base dati.\n"; } $db->disconnetti(); ?> ~ ~ ~ ~ ~ ~