Jeśli chcesz grać hardcorowo, możesz użyć komendy rsync natywnie w OsX , np. Pięciolinii * nix.
Przede wszystkim musisz mieć uprawnienia dostępu do zdalnego hosta przez ssh. Serwer OpenSSH jest wstępnie zainstalowany na Mac OSX i nie trzeba instalować żadnego dodatkowego pakietu. Wystarczy wprowadzić kilka ustawień systemowych. Aby włączyć serwer OpenSSH w systemie Mac OS X, otwórz Preferencje systemowe i kliknij Udostępnianie. Następnie zaznacz pole Zdalne logowanie, aby włączyć SSH, a następnie wybierz przycisk opcji Wszyscy użytkownicy z sekcji Zezwalaj na dostęp .
Możesz teraz uzyskać dostęp do zdalnego hosta przez ssh.
Teraz musisz utworzyć publiczny klucz dostępu w celu uzyskania dostępu bez hasła z lokalnej maszyny gościa do zdalnego hosta przez ssh. W tym celu musisz trochę ubrudzić rękę. :)
Najpierw sprawdź, czy masz już klucze uwierzytelniające. W terminalu uruchom:
sudo ls -la /var/root/.ssh
Jeśli zobaczysz „id_dsa” i id_dsa.pub , możesz pominąć resztę tej sekcji.
Na komputerze klienckim uruchom następujące polecenie w terminalu:
sudo ssh-keygen -t dsa -f /private/var/root/.ssh/id_dsa -C "comment about this key"
Po utworzeniu klucza dostępu na lokalnej maszynie gościa, musisz skopiować klucz publiczny gościa do pliku autoryzowanych kluczy hosta. Możesz to zrobić za pomocą prostej komendy Terminal, która dołącza klucz publiczny do listy autoryzowanych kluczy:
sudo cat /private/var/root/.ssh/id_dsa.pub | ssh root@remote_host_address 'cat - >> ~/.ssh/authorized_keys'
Poniższe polecenie, które wykona przyrostową kopię zapasową głównego systemu plików na lokalnym komputerze-gościu na zdalnym hoście:
/usr/local/bin/rsync -aNHAXx --protect-args --fileflags --force-change --rsync-path="/usr/local/bin/rsync" / root@remote_host_address:/Volumes/Backup/GuestMachine
Możesz zmienić parametry rsync w celu zmiany zachowań synchronizacji. Jeśli dodasz to polecenie do crontab , synchronizację można uruchomić w dowolnych cyklach czasowych. Na przykład:
sudo crontab -e
dodaj wiersz poniżej do 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
Synchronizacja będzie uruchamiana co pół godziny.
Oto przykładowy skrypt Pythona:
#!/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()