Rsync Tutorial · 6 min read · Dec 13, 2025
Specchia il tuo sito web con rsync

Questo tutorial mostra come puoi specchiare il tuo sito web dal tuo server web principale a un server di backup che può subentrare se il server principale fallisce. Utilizziamo lo strumento rsync per questo, e lo facciamo eseguire tramite un cron job che controlla ogni x minuti se c’è qualcosa da aggiornare sul mirror. Così il tuo server di backup dovrebbe essere di solito aggiornato se deve subentrare.
rsync aggiorna solo i file che sono cambiati, quindi non è necessario trasferire 5 GB di dati ogni volta che esegui rsync. Specchia solo i file nuovi/cambiati e può anche eliminare i file dal mirror che sono stati eliminati sul server principale. Inoltre, può preservare permessi e proprietà dei file e delle directory specchiati; per preservare le proprietà, dobbiamo eseguire rsync come root, il che è ciò che facciamo qui. Se i permessi e/o le proprietà cambiano sul server principale, rsync li cambierà anche sul server di backup.
In questo tutorial tunneleremo rsync attraverso SSH, che è più sicuro; significa anche che non devi aprire un altro porto nel tuo firewall per rsync - è sufficiente che il porto 22 (SSH) sia aperto. Il problema è che SSH richiede una password per accedere, il che non è buono se vuoi eseguire rsync come cron job. La necessità di una password richiede interazione umana, che non è ciò che vogliamo.
Ma fortunatamente c’è una soluzione: l’uso di chiavi pubbliche. Creiamo una coppia di chiavi (sul nostro server di backup mirror.example.com), una delle quali è salvata in un file sul sistema remoto (server1.example.com). Successivamente non ci verrà più richiesta una password quando eseguiamo rsync. Questo include anche i cron job, che è esattamente ciò che vogliamo.
Come potresti già aver indovinato da quanto ho scritto finora, il concetto è che iniziamo il mirroring di server1.example.com direttamente da mirror.example.com; server1.example.com non deve fare nulla per essere specchiato.
Utilizzerò la seguente configurazione qui:
- Server principale: server1.example.com (server1) - Indirizzo IP: 192.168.0.100
- Server mirror/di backup: mirror.example.com (mirror) - Indirizzo IP: 192.168.0.175
- Il sito web che deve essere specchiato si trova in /var/www su server1.example.com.
rsync è per specchiare solo file e directory; se vuoi specchiare il tuo database MySQL, usa invece il mirroring/repliazione di MySQL.
Voglio dire prima che questo non è l’unico modo per impostare un tale sistema. Ci sono molti modi per raggiungere questo obiettivo, ma questo è il modo che seguirò.
Il primo passo è accedere o diventare l’utente root sul tuo sistema. Su Debian e centOS, usa:
su -Se sei connesso come un utente diverso da root. Su Ubuntu, usa:
sudo -sinvece.
1 Installa rsync
Prima di tutto, dobbiamo installare rsync sia su server1.example.com che su mirror.example.com. Per i sistemi Debian e Ubuntu, questo appare così:
server1/mirror:
(Lo facciamo come root!)
apt install rsyncSu altre distribuzioni Linux, utilizzeresti yum / dnf (Fedora/CentOS) o yast (SuSE) per installare rsync.
Su CentOS / Rocky Linux o AlmaLinux, usa:
dnf install rsync2 Crea un utente non privilegiato su server1.example.com
Ora creiamo un utente non privilegiato chiamato someuser su server1.example.com che sarà utilizzato da rsync su mirror.example.com per specchiare la directory /var/www (ovviamente, someuser deve avere permessi di lettura su /var/www su server1.example.com).
server1:
(Lo facciamo come root!)
sudo useradd -d /home/someuser -m -s /bin/bash someuserQuesto creerà l’utente someuser con la home directory /home/someuser e la shell di login /bin/bash (è importante che someuser abbia una shell di login valida - qualcosa come /bin/false non funziona!). Ora dai a someuser una password:
passwd someuser3 Testa rsync
Successivamente, testiamo rsync su mirror.example.com. Come root facciamo questo:
mirror:
rsync -avz -e ssh [email protected]:/var/www/ /var/www/Dovresti vedere qualcosa del genere. Rispondi con sì:
L'autenticità dell'host 'server1.example.com (192.168.0.100)' non può essere stabilita.
La chiave RSA fingerprint è 32:e5:79:8e:5f:5a:25:a9:f1:0d:ef:be:5b:a6:a6:23.
Sei sicuro di voler continuare a connetterti (sì/no)?<-- sìQuindi inserisci la password di someuser, e dovresti vedere che la directory /var/www di server1.example.com è specchiata in /var/www su mirror.example.com.
Puoi controllarlo in questo modo su entrambi i server:
server1/mirror:
ls -la /var/wwwDovresti vedere che tutti i file e le directory sono stati specchiati su mirror.example.com, e i file e le directory dovrebbero avere gli stessi permessi/proprietà di server1.example.com.
4 Crea le chiavi su mirror.example.com
Ora creiamo la coppia di chiavi privata/pubblica su mirror.example.com:
mirror:
(Lo facciamo come root!)
mkdir /root/rsync
ssh-keygen -t dsa -b 1024 -f /root/rsync/mirror-rsync-keyVedrai qualcosa del genere:
Generazione della coppia di chiavi pubblica/privata dsa.
Inserisci la passphrase (vuoto per nessuna passphrase): [premi invio qui]
Inserisci la stessa passphrase di nuovo: [premi invio qui]
La tua identificazione è stata salvata in /root/cron/mirror-rsync-key.
La tua chiave pubblica è stata salvata in /root/cron/mirror-rsync-key.pub.
La chiave fingerprint è:
68:95:35:44:91:f1:45:a4:af:3f:69:2a:ea:c5:4e:d7 root@mirrorÈ importante che tu non inserisca una passphrase altrimenti il mirroring non funzionerà senza interazione umana, quindi premi semplicemente invio!
Successivamente, copiamo la nostra chiave pubblica su server1.example.com:
mirror:
(Ancora, lo facciamo come root.)
scp /root/rsync/mirror-rsync-key.pub [email protected]:/home/someuser/La chiave pubblica mirror-rsync-key.pub dovrebbe ora essere disponibile in /home/someuser su server1.example.com.
5 Configura server1.example.com
Ora accedi tramite SSH su server1.example.com come someuser (non come root!) e fai questo:
server1:
(Per favore, fallo come someuser!)
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_keysFacendo questo, abbiamo aggiunto il contenuto di mirror-rsync-key.pub al file /home/someuser/.ssh/authorized_keys. /home/someuser/.ssh/authorized_keys dovrebbe apparire simile a questo:
server1:
(Ancora come someuser!)
vi /home/someuser/.ssh/authorized_keysssh-dss AAAAB3NzaC1kc3MAAA[...]lSUom root@
mirrorOra vogliamo consentire connessioni solo da mirror.example.com, e l’utente connesso dovrebbe essere autorizzato a usare solo rsync, quindi aggiungiamo
command="/home/someuser/rsync/checkrsync",from="mirror.example.com",no-port-forwarding,no-X11-forwarding,no-ptyproprio all’inizio di /home/someuser/.ssh/authorized_keys:
server1:
(Ancora come someuser!)
vi /home/someuser/.ssh/authorized_keyscommand="/home/someuser/rsync/checkrsync",from="mirror.example.com",no-port-forwarding,no-X11-forwarding,no-pty ssh-dss AAAAB3NzaC1kc3MAAA[...]lSUom root@
mirrorDevi usare un FQDN come mirror.example.com invece di un indirizzo IP dopo from=, altrimenti il mirroring automatico non funzionerà!
Ora creiamo lo script /home/someuser/rsync/checkrsync che rifiuta tutti i comandi tranne rsync.
server1:
(Lo facciamo ancora come someuser!)
mkdir ~/rsync
vi ~/rsync/checkrsync#!/bin/sh
case "$SSH_ORIGINAL_COMMAND" in
**)
echo "Rifiutato"
;;
*(*)
echo "Rifiutato"
;;
*{*)
echo "Rifiutato"
;;
*;*)
echo "Rifiutato"
;;
*<*)
echo "Rifiutato"
;;
*`*)
echo "Rifiutato"
;;
rsync ext--server*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo "Rifiutato"
;;
esacchmod 700 ~/rsync/checkrsync6 Testa rsync su mirror.example.com
Ora dobbiamo testare su mirror.example.com se possiamo specchiare server1.example.com senza essere invitati a inserire la password di someuser. Facciamo questo:
mirror:
(Lo facciamo come root!)
rsync -avz --delete --exclude=/stats --exclude=/error --exclude=/files/pictures -e "ssh -i /root/rsync/mirror-rsync-key" [email protected]:/var/www/ /var/www/(L’opzione –delete significa che i file che sono stati eliminati su server1.example.com dovrebbero essere eliminati anche su mirror.example.com. L’opzione –exclude significa che questi file/directory non dovrebbero essere specchiati; ad esempio, –exclude=/error significa “non specchiare /var/www/error”. Puoi usare più opzioni –exclude. Ho elencato queste opzioni come esempi; puoi adattare il comando alle tue esigenze. Dai un’occhiata a
man rsyncper ulteriori informazioni.)
Dovresti ora vedere che il mirroring avviene:
receiving file list ... done
sent 71 bytes received 643 bytes 476.00 bytes/sec
total size is 64657 speedup is 90.56senza essere invitato a inserire una password! Questo è ciò che volevamo.
7 Crea un cron job
Vogliamo automatizzare il mirroring, ecco perché creiamo un cron job per esso su mirror.example.com. Esegui crontab -e come root:
mirror:
(Lo facciamo come root!)
crontab -ee crea un cron job come questo:
*/5 * * * * /usr/bin/rsync -azq --delete --exclude=/stats --exclude=/error --exclude=**/files/pictures -e "ssh -i /root/rsync/mirror-rsync-key" [email protected]:/var/www/ /var/www/ Questo eseguirebbe rsync ogni 5 minuti; adattalo alle tue esigenze (vedi
man 5 crontab). Uso il percorso completo per rsync qui (/usr/bin/rsync) solo per essere sicuro che cron sappia dove trovare rsync. La tua posizione di rsync potrebbe differire. Esegui
mirror:
(Lo facciamo come root!)
which rsyncper scoprire dove si trova il tuo.
8 Link
- rsync: https://rsync.samba.org/
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.