Si quieres ir al hardcore, puedes usar el comando rsync de forma nativa en OsX , como * nix staff.
Antes de todo, debe tener permiso para acceder al host remoto mediante ssh. El servidor OpenSSH está preinstalado en Mac OsX y no necesita instalar ningún paquete adicional. Solo necesito hacer algunas configuraciones del sistema. Para habilitar el servidor OpenSSH en Mac OS X, abra Preferencias del sistema y haga clic en Compartir. Y luego, marque la casilla Inicio de sesión remoto para habilitar SSH, luego seleccione el botón de radio etiquetado Todos los usuarios en la sección Permitir acceso para .
Ahora puede acceder al host remoto mediante ssh.
Ahora, debe crear una clave de acceso público para acceso sin contraseña desde la máquina local invitada al host remoto a través de ssh. Para eso debes ensuciarte un poco la mano. :)
Primero, determine si ya tiene claves de autenticación. En la Terminal , ejecuta:
sudo ls -la /var/root/.ssh
Si ve "id_dsa" e id_dsa.pub , puede omitir el resto de esta sección.
En la máquina cliente, ejecute lo siguiente en la Terminal:
sudo ssh-keygen -t dsa -f /private/var/root/.ssh/id_dsa -C "comment about this key"
Después de crear la clave de acceso en la máquina local invitada, debe copiar la clave pública del invitado en el archivo autorizado de claves del host. Puede hacer esto con un simple comando de Terminal que agrega la clave pública a la lista de claves autorizadas:
sudo cat /private/var/root/.ssh/id_dsa.pub | ssh root@remote_host_address 'cat - >> ~/.ssh/authorized_keys'
El siguiente comando realizará una copia de seguridad incremental de su sistema de archivos raíz en la máquina invitada local en su host remoto:
/usr/local/bin/rsync -aNHAXx --protect-args --fileflags --force-change --rsync-path="/usr/local/bin/rsync" / root@remote_host_address:/Volumes/Backup/GuestMachine
Puede cambiar los parámetros de rsync para cambiar los comportamientos de sincronización. Si agrega este comando en crontab , la sincronización se puede ejecutar en cualquier ciclo de tiempo. Por ejemplo:
sudo crontab -e
agregue la línea a continuación a crontab:
*/30 * * * * /usr/local/bin/rsync -aNHAXx --protect-args --fileflags --force-change --rsync-path="/usr/local/bin/rsync" / root@remote_host_address:/Volumes/Backup/GuestMachine
Esto se ejecutará sincronización en cada media hora.
Aquí está el script de Python de muestra:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Cron automated synchronization script.
Desc: Synchronize remote folder into local machine. Duplicate processes
are disallowed until running process finished.
Usage:
:: Change required variables as _user, _password, _domain etc.
:: Edit crontab
# crontab -e
:: Append line below.
*/30 * * * * python synchronizator.py 2>&1 &
Author: Sencer HAMARAT (RecNes)
E-Mail: sencerhamarat@gmail.com
"""
import shlex
from subprocess import Popen, PIPE
import logging as log
import sys
__author__ = "Sencer HAMARAT"
_user = 'username'
_password = 'password'
_domain = 'example.com'
_expectation = "Enter passphrase for key \'/home/%s/.ssh/id_rsa\':" % _user
_rsync = '/usr/bin/rsync --partial --progress -avvz -e'
_pub_key = '/home/%s/.ssh/id_rsa.pub' % _user
_ssh = '/usr/bin/ssh -i %s' % _pub_key
_remoteDir = '/home/%s/backup/' % _user
_localDir = '/home/%s/backup/' % _user
_command = '%s %s %s@%s:%s %s' % (_rsync, _ssh, _user, _domain, _remoteDir, _localDir)
run_command = shlex.split(_command)
_logFile = "logfile.log"
_logFormat = "%(asctime)s %(levelname)s %(name)s %(process)d %(threadName)s %(module)s:%(lineno)d %(funcName)s() " \
"%(message)s\n"
log.basicConfig(filename=_logFile, level=log.DEBUG, format=_logFormat)
log.debug(u'Command will run: %s' % _command)
try:
running_command = Popen(run_command, stdin=PIPE, stdout=PIPE, stderr=PIPE)
if running_command.poll():
log.debug(repr(running_command.poll()))
sys.exit()
if _expectation in running_command.communicate():
running_command.communicate(_password)
print running_command.communicate()
except Exception as e:
log.debug(repr(e))
finally:
sys.exit()