Se você quer se tornar hardcore, pode usar o comando rsync nativamente no OsX , como a equipe * nix.
Antes de tudo, você deve ter permissão para acessar o host remoto pelo ssh. O servidor OpenSSH está pré-instalado no Mac OsX e você não precisa instalar nenhum pacote adicional. Só precisa fazer algumas configurações do sistema. Para habilitar o servidor OpenSSH no Mac OS X, abra Preferências do Sistema e clique em Compartilhar. Além disso, marque a caixa Login remoto para ativar o SSH e selecione o botão de opção Todos os usuários na seção Permitir acesso para .
Agora você pode acessar o host remoto pelo ssh.
Agora, você deve criar uma chave de acesso público para acesso sem senha da máquina local do convidado ao host remoto através do ssh. Para isso, você deve sujar a mão um pouco. :)
Primeiro, determine se você já possui chaves de autenticação. No terminal , execute:
sudo ls -la /var/root/.ssh
Se você vir "id_dsa" e id_dsa.pub , poderá pular o restante desta seção.
Na máquina cliente, execute o seguinte no Terminal:
sudo ssh-keygen -t dsa -f /private/var/root/.ssh/id_dsa -C "comment about this key"
Depois de criar a chave de acesso na máquina local do convidado, você precisa copiar a chave pública do convidado no arquivo allowed_keys do host. Você pode fazer isso com um simples comando Terminal que anexa a chave pública à lista de chaves autorizadas:
sudo cat /private/var/root/.ssh/id_dsa.pub | ssh root@remote_host_address 'cat - >> ~/.ssh/authorized_keys'
O comando abaixo que executará um backup incremental do seu sistema de arquivos raiz na máquina convidada local no 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
Você pode alterar os parâmetros do rsync para alterar os comportamentos de sincronização. Se você adicionar este comando ao crontab , a sincronização poderá ser executada a qualquer momento. Por exemplo:
sudo crontab -e
acrescente a linha abaixo ao 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
Essa sincronização será executada a cada meia hora.
Aqui está o exemplo de script Python:
#!/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()