Oltre a tutte le risposte precedenti, eccone una che si basa su chiavi SSH con restrizioni su cosa si può fare quando si accede con quella chiave.
Sul server A
Su questo è meno importante se crei un utente separato o usi uno dei tuoi nomi utente esistenti, anche se se fossi io creerei un utente separato. Userò il nome utente bkpuser
per entrambi i server nei miei esempi di seguito.
Una volta effettuato l'accesso bkpuser
, creare una chiave SSH senza password.
Sul server B
Abilita PubkeyAuthentication
in sshd_config
.
Crea l'utente bkpuser
. Imposta una password molto complicata o disabilita l'accesso con password per quell'utente (esattamente come lo fai dipenderà da quale unix e distro stai eseguendo). Il punto è che l'utente deve accedere solo con una chiave SSH. Assicurarsi che bkpuser
abbia accesso in lettura a tutte le directory e ai file di cui si desidera eseguire il backup.
Copia la parte pubblica della chiave creata su A ~bkpuser/.ssh/authorized_keys
su B. Modifica il per eseguire automagicamente un comando sulla connessione. Quel comando non dovrebbe essere un puntatore a uno script di shell; invece inserire direttamente lo script shell nella chiave. Includere anche una limitazione in modo che la chiave possa essere utilizzata solo dal server A e nessun altro server. Nell'esempio seguente, sto fornendo al server A l'indirizzo IP 10.1.2.3
e presumo che i file di cui voglio eseguire il backup siano tutti sotto /data
.
from="10.1.2.3",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="cd /data;/usr/bin/tar -cf - *; /usr/bin/logger -t BACKUP -p daemon.info \"INFO: Backup-files on $HOST fetched from ${SSH_CLIENT%% *} by $USER\";" ssh-dss AA.....
Sul server A
Se si sta utilizzando una delle schede cron che supportano le @reboot
voci, aggiungere tale voce a bkpuser
crontab con il comando ssh -i ~bkpuser/.ssh/id_dsa serverB > backup.tar.gz
. Se non lo consente, impostalo in qualsiasi momento, se fossero i miei dati, probabilmente lo farei ogni giorno.