यदि आप कट्टर जाना चाहते हैं, तो आप ऑक्सएक्स में मूल रूप से * निक्स कर्मचारियों की तरह rsync कमांड का उपयोग कर सकते हैं ।
सब कुछ से पहले, आपके पास ssh द्वारा दूरस्थ होस्ट तक पहुंचने की अनुमति होनी चाहिए। OpenSSH सर्वर को Mac OsX पर प्रीइंस्टॉल्ड किया गया है और आपको कोई अतिरिक्त पैकेज स्थापित करने की आवश्यकता नहीं है। बस कुछ सिस्टम सेटिंग्स करने की जरूरत है। मैक ओएस एक्स पर ओपनएसएसएच सर्वर को सक्षम करने के लिए, सिस्टम प्राथमिकताएं खोलें और साझाकरण पर क्लिक करें। और इसके बजाय, 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"
AFTER ने स्थानीय अतिथि मशीन में एक्सेस कुंजी बनाई, आपको अतिथि की अधिकृत कुंजी को होस्ट की अधिकृत_की फ़ाइल में कॉपी करना होगा। आप इसे एक साधारण टर्मिनल कमांड के साथ कर सकते हैं, जो सार्वजनिक कुंजी को अधिकृत कुंजी की सूची में जोड़ता है:
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
यह हर आधे घंटे में सिंक्रोनाइज़ेशन चलाया जाएगा।
यहाँ नमूना पायथन लिपि है:
#!/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()