Pour faire cela quotidiennement dans la plupart des distributions Linux, vous devriez pouvoir simplement mettre la rsync
commande (selon la réponse de @ guido ) dans un script et mettre le script dans le /etc/cron.daily
répertoire. Tant qu'il anacron
est installé (peut-être pas par défaut), les cron.daily
travaux manqués seront rattrapés lors du prochain démarrage de la machine (et exécutés à minuit si la machine est commutée).
Pour le script, vous feriez juste:
#!/bin/sh
rsync -a user@serverB:/source/folder/ /destination_folder
Vous pouvez ajouter l' -z
option (compression) si la sauvegarde se fait sur une connexion lente (ish) ou si vous souhaitez économiser la bande passante, mais d'après mon expérience, cela nuira en fait aux performances avec les machines / réseaux modernes.
Si vous souhaitez conserver le journal de chaque sauvegarde, vous pouvez faire quelque chose comme:
#!/bin/sh
rsync -av user@serverB:/source/folder/ /destination_folder \
>/var/log/backup_log 2>&1
Notez que pour que cela fonctionne comme un travail cron, vous devez avoir configuré ssh sans mot de passe pour root sur le serveurA pour vous connecter au serveurB. Il doit s'agir du compte root (c'est-à-dire des clés /root/.ssh
) car les cron.daily
jobs sont exécutés en tant que root.
anacron
ne reprendra pas les travaux par utilisateurcron
. Bien que vous puissiez toujours utilisersu
/ àsudo
partir du script pour exécuter rsync en tant qu'utilisateur particulier. Mais notez que les clés seront plus solidement maintenues sous/root
.user
pourrait simplement être un utilisateur normal sur machineB selon ce que vous sauvegardez.ls -l
certains fichiers à votre question, les gens peuvent donner des conseils supplémentaires.Je suggère d'utiliser rdiff-backup . Je l'utilise maintenant pour faire des sauvegardes incrémentielles automatiques chaque nuit de mes propres données (deux postes de travail, deux serveurs et un compte sur le serveur de quelqu'un d'autre).
J'ai utilisé rsync plus tôt pour cela, mais je suis passé à rdiff-backup car il est plus pratique et il peut effectuer des sauvegardes incrémentielles de gros fichiers tels que des images de disque de machine virtuelle. rdiff-backup est un peu comme mes précédents scripts de sauvegarde rsync, mais c'est fait droit .
J'ai mis un fichier de script dans /etc/cron.daily sur la machine où la sauvegarde est stockée, qui démarre rdiff-backup une fois par jour tôt le matin et récupère les données de la machine distante.
la source
En plus de toutes les réponses précédentes, en voici une qui repose sur des clés SSH avec des restrictions sur ce qui peut être fait lorsque vous êtes connecté avec cette clé.
Sur le serveur A
Sur celui-ci, il est moins important si vous créez un utilisateur distinct ou utilisez l'un de vos noms d'utilisateur existants, mais si c'était moi, je créerais un utilisateur distinct. J'utiliserai le nom
bkpuser
d' utilisateur pour les deux serveurs dans mes exemples ci-dessous.Une fois connecté
bkpuser
, créez une clé SSH sans mot de passe.Sur le serveur B
Activer
PubkeyAuthentication
danssshd_config
.Créez l'utilisateur
bkpuser
. Définissez un mot de passe très compliqué ou désactivez la connexion par mot de passe pour cet utilisateur (la façon dont vous le faites dépendra de l'unix et de la distribution que vous utilisez). Le fait est que l'utilisateur ne doit se connecter qu'avec une clé SSH. Assurez-vous qu'ilbkpuser
dispose d'un accès en lecture à tous les répertoires et fichiers que vous souhaitez sauvegarder.Copiez la partie publique de la clé créée sur A vers
~bkpuser/.ssh/authorized_keys
sur B. Modifiez le pour exécuter automatiquement une commande lors de la connexion. Cette commande ne doit pas être un pointeur vers un script shell; à la place, insérez directement le script shell dans la clé. Incluez également une limitation afin que la clé ne puisse être utilisée que depuis le serveur A et aucun autre serveur. Dans l'exemple ci-dessous, je donne au serveur A l'adresse IP10.1.2.3
et je suppose que les fichiers que je veux sauvegarder sont tous sous/data
.Sur le serveur A
Si vous utilisez l'un des onglets cron qui prend en charge les
@reboot
entrées, ajoutez une telle entrée àbkpuser
s crontab avec la commandessh -i ~bkpuser/.ssh/id_dsa serverB > backup.tar.gz
. Si cela ne les autorise pas, définissez-le à tout moment - si c'était mes données, je le ferais probablement tous les jours.la source
Voici une solution complète pour sauvegarder le serveur B sur le serveur A tous les jours à 4h du matin en utilisant SSH.
Créer une connexion SSH automatique du serveur B au serveur A
Créer un script de sauvegarde sur le serveur B
nano / root / sauvegarde
chmod 744 / root / sauvegarde
Automatisez la sauvegarde sur le serveur B
crontab -e
Pour plus de détails, voir les pages Se connecter à SSH sans entrer de mot de passe sous Linux et sauvegarder un serveur sur Debian ou Ubuntu Linux .
la source
Vous pouvez utiliser rsync pour cela (en quelque sorte à l'envers):
où:
la source
-a
implique-r
.Le nœud du problème est de savoir comment le faire automatiquement (pas besoin de saisir des mots de passe):
screen
outmux
eval $(ssh-agent)
ssh-add
export RSYNC_RSH="ssh -i ~/.ssh/id_rsa ..."
while :; do rsync -av u@h:/p /local; sleep $[24*60*60]; done
la source
ssh
.RSYNC_SSH
à la recherche des emplacements standard des clés SSH....
points où vous pouvez ajouter des arguments utiles. Vous n'avez pas non plus lu mon dernier commentaire où je mentionne la "question vraiment importante" donc je ne le ferais jamais avec des clés sans mot de passe. Vous devrez également l'activerPubkeyAuthentication
et personne ne l'a dit.