web-dev-qa-db-fra.com

SSH Automatic Remote UPS

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.

16
PyRulez

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.

11
Graeme

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 le serveur A

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.

Sur le serveur B

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.....

Sur le serveur A

Si vous utilisez l'un des onglets cron prenant en charge @reboot entrées, ajoutez une telle entrée à bkpusers 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.

4
Jenny D

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 .

2
Guillaume

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
1
guido