หากคุณต้องการที่จะไม่ยอมใครง่ายๆคุณสามารถใช้คำสั่ง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"
หลังจากสร้างรหัสการเข้าถึงในเครื่องแขกท้องถิ่นคุณต้องคัดลอกกุญแจสาธารณะของผู้เยี่ยมชมไปยังไฟล์ authorized_keys ของโฮสต์ คุณสามารถทำได้ด้วยคำสั่งเทอร์มินัลอย่างง่ายที่ผนวกคีย์สาธารณะเข้ากับรายการของคีย์ที่ได้รับอนุญาต:
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()