J'ai deux machines, A
et B
. Machine A
peut ssh dans B
. A
a beaucoup d'espace libre. B
's Les données sont dans une sorte de situation risquée. Comment puis-je sauvegarder tous les données B
's de données sur A
automatiquement. Il ne doit pas nécessairement être terriblement fréquent, mais il devrait être mains libres. Chaque fois que A
boots up serait assez fréquent. J'entends la synchronisation peut faire cela.
Pour ce faire quotidiennement dans la plupart des distributions Linux, vous devriez pouvoir simplement mettre la commande rsync
(selon @ Réponse de Guido ) Dans un script et placez le script dans le /etc/cron.daily
répertoire. Tant que anacron
est installé (peut ne pas être par défaut) toute manquée cron.daily
Les emplois seront rattrapés lors de la prochaine démarche des bottes de la machine (ainsi que de courir à 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 le -z
(compression) Option si la sauvegarde est sur une connexion lente (ish) ou si vous souhaitez enregistrer la bande passante, mais dans mon expérience, cela fera mal aux performances avec des machines/réseaux modernes.
Si vous voulez garder 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
Remarque Pour que cela fonctionne comme un travail cron, vous devez avoir SSH sans passe-passe SSH Configuration pour root sur Servera pour enregistrer dans Serverb. Ce doit être le compte root (c.-à-d. Keys dans /root/.ssh
) puisque cron.daily
Les travaux sont courus en tant que root.
Je suggérerais d'utiliser Sauvegarde RDiff. Je l'utilise maintenant pour effectuer des sauvegardes incrémentielles automatiques toutes les nuits de mes propres données (deux stations 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 passai à la sauvegarde de RDiff puisqu'il est plus pratique et peut effectuer des sauvegardes incrémentielles de fichiers volumineux tels que des images de disque à machine virtuelle. RDiff-Backup est beaucoup comme mes précédentes balayages de sauvegarde RSYNC, mais faites Droite .
J'ai mis un fichier de script dans / etc/cron.daily sur la machine où la sauvegarde est stockée, ce qui commence la sauvegarde de RDiff une fois par jour tôt le matin et récupère les données de la machine distante .
En plus de toutes les réponses précédentes, voici une qui repose sur les touches SSH avec des restrictions sur ce qui peut être fait lors de la connexion avec cette clé.
Sur celui-ci, il est moins important que vous créiez un utilisateur séparé ou utilisez l'un de vos noms d'utilisateur existants, bien que si c'était moi, je créerais un utilisateur distinct. Je vais utiliser le nom d'utilisateur bkpuser
pour les deux serveurs de mes exemples ci-dessous.
Lorsque connecté bkpuser
, créez une clé SSH sans mot de passe.
Activer PubkeyAuthentication
dans sshd_config
.
Créez l'utilisateur bkpuser
. Définissez un mot de passe très compliqué ou désactivez la connexion de mot de passe pour cet utilisateur (exactement comment vous dépendrez de quel Unix et une distribution vous exécutez). Le point est que l'utilisateur ne doit se connecter qu'avec une touche SSH. Assurez-vous que bkpuser
a lu accès à tous les répertoires et fichier que vous souhaitez sauvegarder.
Copiez la partie publique de la clé créée sur A à ~bkpuser/.ssh/authorized_keys
sur B. Modifiez l'exécution d'une commande automatiquement à la connexion. Cette commande ne devrait pas être un pointeur sur un script shell; Au lieu de cela, insérez le script Shell dans la touche directement. Incluez également une limitation de sorte que la clé ne puisse être utilisée que chez Server A et aucun autre serveur. Dans l'exemple ci-dessous, je donne au serveur une adresse IP 10.1.2.3
Et je suppose que les fichiers que je veux sauvegarder sont tous sous /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.....
Si vous utilisez l'un des onglets cron prenant en charge @reboot
entrées, ajoutez une telle entrée à bkpuser
s crontab avec la commande ssh -i ~bkpuser/.ssh/id_dsa serverB > backup.tar.gz
. Si cela ne permet pas à ceux-ci, réglez-le à tout moment, vous aimez - si c'était mes données, je le ferais probablement tous les jours.
Voici une solution complète pour la sauvegarde du serveur B sur le serveur A tous les jours à 4h du matin avec SSH.
Créez une connexion automatique SSH du serveur B sur le serveur A
ssh-keygen -t dsa -b 1024
ssh-copy-id -i ~/.ssh/id_dsa.pub "-p ssh_port root@server_a"
Créez un script de sauvegarde sur le serveur B
nano/root/sauvegarde
# !/bin/sh
# Variables loading
Host="root@server_a"
PORT=22
DIR="/var/backups/server_b"
# Directories creating
ssh -p $PORT $Host <<EOF
mkdir -p $DIR/home
logout
EOF
# Files backing up
rsync -aze "ssh -p $PORT" --delete /home/user $Host:$DIR/home
chmod 744/root/sauvegarde
Automatisez la sauvegarde sur le serveur B
crontab -e
0 4 * * * /root/backup > /dev/null
Pour plus de détails, voir Pages Connectez-vous à SSH sans entrer de mot de passe sur Linux et sauvegarde d'un serveur sur Debian ou Ubuntu Linux .
Vous pouvez utiliser RSYNC pour cela (en uniforme de manière inverse):
serverA# rsync -avz user@serverB:/path-to-backup.tar.gz /var/backup
où:
-avz archive, compress and be verbose