====== 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();
?>
~
~
~
~
~
~