Якщо ви хочете перейти на хардкор, ви можете використовувати команду rsync спочатку в OsX , наприклад * nix staff.
Перш за все, ви повинні мати дозвіл на доступ до віддаленого хоста за допомогою ssh. Сервер OpenSSH попередньо встановлений на Mac OsX, і вам не потрібно встановлювати будь-який додатковий пакет. Просто потрібно виконати деякі системні налаштування. Щоб увімкнути сервер OpenSSH на Mac OS X, відкрийте Налаштування системи та натисніть Надіслати. І тоді встановіть прапорець Віддалений вхід, щоб увімкнути SSH, а потім виберіть перемикач із написом Усі користувачі у розділі Дозволити доступ для .
Тепер ви можете отримати доступ до віддаленого хоста за допомогою ssh.
Тепер ви повинні створити відкритий ключ доступу для доступу без пароля від локальної гостьової машини до віддаленого хоста через ssh. Для цього потрібно трохи забруднити руку. :)
Спочатку визначте, чи є у вас вже ключі аутентифікації. У Терміналі запустіть:
sudo ls -la /var/root/.ssh
Якщо ви бачите "id_dsa" та id_dsa.pub , ви можете пропустити решту цього розділу.
На клієнтській машині виконайте наступне в Терміналі:
sudo ssh-keygen -t dsa -f /private/var/root/.ssh/id_dsa -C "comment about this key"
Після того, як створений ключ доступу в локальній гостьовій машині, потрібно скопіювати відкритий ключ гостя у файл дозволеного_кейта хоста. Це можна зробити за допомогою простої команди Terminal, яка додає відкритий ключ до списку авторизованих ключів:
sudo cat /private/var/root/.ssh/id_dsa.pub | ssh root@remote_host_address 'cat - >> ~/.ssh/authorized_keys'
Команда нижче, яка виконає додаткове резервне копіювання вашої кореневої файлової системи в локальній гостьовій машині на віддаленому хості:
/usr/local/bin/rsync -aNHAXx --protect-args --fileflags --force-change --rsync-path="/usr/local/bin/rsync" / root@remote_host_address:/Volumes/Backup/GuestMachine
Ви можете змінити параметри rsync для поведінки синхронізації змін. Якщо ви додасте цю команду в crontab , синхронізацію можна запустити в будь-який часовий цикл. Наприклад:
sudo crontab -e
додайте рядок нижче до 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
Це буде запускатися синхронізацією кожні півгодини.
Ось зразок сценарію 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()