类似 Dropbox 的文件同步,无需中央服务器

类似 Dropbox 的文件同步,无需中央服务器

我正在寻找一种方法来通过互联网同步两台 Mac 上的辅助驱动器。两台 Mac 之间有一致的 VPN 连接,我可以像它们并排​​放置一样访问它们。

我正在寻找一种实现类似 Dropbox 体验的方法,如果我在一台 Mac 上修改文件,该文件将被推送到另一台 Mac(反之亦然)。我还需要限制带宽的能力(这样我们的 1 兆比特小上传管道就不会过载)。有什么建议吗?

哦,目前使用 Dropbox 似乎不太可能,因为我的硬盘是 500GB。谢谢!

答案1

查看Bittorrent 同步。它具有类似 Dropbox 的同步功能,但没有云。

答案2

如果你想更进一步,你可以使用同步本机命令操作系统,就像 *nix 员工一样。

首先,你必须有通过 ssh 访问远程主机的权限。OpenSSH 服务器在 Mac OS X 上已预装,您无需安装任何附加软件包。只需进行一些系统设置。要在 Mac OS X 上启用 OpenSSH 服务器,请打开系统偏好设置并单击共享。然后,选中远程登录框以启用 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 的参数来更改同步行为。如果您将此命令添加到定时任务,同步可以在任意时间周期运行。例如:

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: [email protected]
"""

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()

答案3

Owncloud如果您想要基于 Web 的访问,则是一种可行的解决方案。

您将需要自己的服务器来托管 Owncloud,但它更像是一种基于服务器的解决方案,您的 2 个客户端可以随意访问他们需要的内容,但只有 1 个相关文件的副本,该副本位于 Owncloud 服务器上。

答案4

如果是 Windows,则有一个同步玩具工具,分三步完成。如果是 Mac,则ChronSync工具或三重备份工具

相关内容