介绍
在处理联网计算机时,在服务器和本地计算机之间同步文件和目录是非常常见的要求。 的自动同步目录的内容的一种方法是用一种称为BitTorrent的同步技术。 此软件利用通常用于文件共享的BitTorrent协议作为同步工具。
通过BitTorrent Sync进行的通信基于自动生成的唯一共享密钥进行端到端加密。 虽然BitTorrent作为文件共享机制是一个公共服务,BitTorrent Sync使用协议的方式是私有的,这意味着文件可以安全地传输。
在本指南中,我们将演示如何在两个Ubuntu 14.04服务器上安装和使用BitTorrent Sync。 我们将向您展示如何设置共享目录,以及如何为Web界面设置SSL加密,以安全地管理您的服务器。
安装BitTorrent同步
我们需要开始的第一步是在我们的两个服务器实例上安装BitTorrent Sync软件。 本指南中的许多过程将在两台计算机上进行镜像,因此请确保为每台计算机复制命令。
没有官方的BitTorrent同步包可用在Ubuntu的默认知识库。 然而,有一个由Leo Moll(称为tuxpoldo)创建的良好维护的PPA(个人包存档),我们可以使用它来获取最新的包。
在两个服务器上,添加此PPA,以便我们的系统可以拉下包:
sudo add-apt-repository ppa:tuxpoldo/btsync
现在,我们需要更新我们的本地包索引,以便我们的系统知道新可用的软件。 然后我们将安装BitTorrent Sync,以及nginx以后在我们的网络界面添加SSL加密:
sudo apt-get update
sudo apt-get install btsync nginx
当您尝试安装时,将在提示中询问相当多的问题。 现在,在所有提示中按ENTER键。 我们将以更深入的方式对我们的服务进行重新配置。
配置BitTorrent同步
现在该软件已安装,我们实际上要运行配置脚本,提示我们第二次的值。 但是,这一次,我们将可以访问我们为此目的所需的其他选项。
要再次运行脚本,这次选择我们的设置,在每个服务器上键入:
sudo dpkg-reconfigure btsync
这将通过比初始安装过程中更加的提示运行你。 在大多数情况下,我们将使用默认值,您只需按ENTER键。
下面,我介绍你需要配置值:
- Web界面绑定IP地址 :
127.0.0.1
- 用于访问Web界面的用户名 :[选择你想要什么。 我们将保持
admin
在这个例子中的帐户。] - 用于访问Web界面的密码 :[选择你想要什么。 我们将使用
password
用于演示目的。] - umask值,为守护程序设置 :
002
如您所见,对于绝大多数设置,我们可以接受默认值。 上述选择虽然是非常重要的。 如果您错误配置这些,请再次运行该命令以更正您的选择。
配置SSL前端到BitTorrent同步Web界面
现在,我们有大部分的BitTorrent同步设置。 我们将设置我们的同步目录。 但是现在,我们需要用SSL设置我们的nginx web服务器。
您可能已经注意到,我们配置我们的Web界面只提供本地回环接口(在127.0.0.1
)。 这通常意味着,当在远程服务器上运行BitTorrent Sync时,我们将无法访问此。
我们限制访问这样,因为,虽然BitTorrent同步流量本身是加密的,到Web界面的流量是以纯文本传输。 这可以允许任何人观看我们的服务器和本地计算机之间的流量,看到我们的机器之间发送的任何通信。
我们将设置nginx与SSL代理连接通过SSL到我们的BitTorrent Web界面。 这将允许我们远程安全地管理我们的BitTorrent Sync实例。
同样,我们需要在我们的主机上执行所有这些步骤。
生成SSL证书和密钥
实现此设置的第一步是创建一个目录来保存我们的SSL证书和密钥。 我们将在nginx配置目录层次结构下这样做:
sudo mkdir /etc/nginx/ssl
现在,我们可以创建我们的SSL证书,并通过发出以下命令键入单个动作:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
您将被要求填写您的证书的一些信息。 尽可能地填写字段。 真正重要的只有一个是这个:
Common Name (e.g. server FQDN or YOUR name) []:
在此字段中,输入服务器的域名或公共IP地址。
配置Nginx使用SSL加密流量并传递到BitTorrent同步
现在,我们可以配置我们的nginx服务器块,以便在与远程客户端通信时使用我们的SSL证书。 它然后将信息传送到我们的BitTorrent Sync Web界面上,在本地界面上监听。
我们将保留默认的nginx服务器块文件,以防您在将来需要使用此文件。 由于BitTorrent Sync默认在端口“8888”上操作,我们将使用它作为前端SSL端口。
通过在编辑器中使用sudo权限打开一个新文件来创建新的服务器块文件:
sudo nano /etc/nginx/sites-available/btsync
在里面,我们需要添加以下行:
server { listen server_domain_or_IP:8888 ssl; server_name server_domain_or_IP; access_log /var/log/nginx/access.log; ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; location / { proxy_pass http://127.0.0.1:8888; } }
确保您将红色文本更改为服务器的域名或公共IP地址。 这将告诉nginx绑定到BitTorrent Sync Web界面在本地接口上使用的相同端口。 不同的是,nginx将使用公共地址并需要SSL。
它将使用我们创建的SSL证书来加密到客户端的流量。 然后它将它传递到BitTorrent Sync接口。 这样,服务器和客户端之间的流量将被加密,但是BitTorrent Sync接口将像我们从服务器本身访问一样操作。
完成后,保存并关闭文件。
现在,我们只需要链接文件,以便它将被启用:
sudo ln -s /etc/nginx/sites-available/btsync /etc/nginx/sites-enabled/
我们现在可以重新启动服务来实现我们的更改:
sudo service nginx restart
请确保您在每个服务器上执行这些过程。
创建共享目录
我们现在已经配置了BitTorrent同步,并设置了SSL和nginx来加密我们的会话与Web界面。
在我们开始使用Web界面之前,我们应该设置我们要同步的目录。 由于BitTorrent Sync创建的文件,它从远程主机镜像的方式,我们的配置这部分是非常重要的。
首先,在本指南中,我们将位于同步目录/shared
两台服务器上。 让我们现在创建这些目录:
sudo mkdir /shared
一旦你有目录,我们将给我们的根帐户的用户所有权的目录。 同时,我们将给出“btsync”组(这是在安装过程中创建的)组所有权的目录:
sudo chown root:btsync /shared
有许多不同的方式可以配置此访问,每个都有影响。 我们在这里展示一个相当灵活的系统,将最小化权限和所有权冲突。 要找到其他的替代品,他们的取舍,检查出的共享文件夹配置这篇文章 。
在我们分配所有权后,我们应该调整权限。 我们将设置setgid
位的目录,以便btsync
组将给予所有权组在目录中创建任何文件。 要使此工作正常,我们还需要授予组写权限:
sudo chmod 2775 /shared
最后,由于我们的定期系统帐户不是用户所有者或目录的组所有者,我们需要将我们的定期帐户添加到btsync
组。 这将允许我们作为我们的常规用户访问和与此目录中的内容进行交互:
sudo usermod -a -G btsync your_user
注 :在这一点上,你必须注销并重新登录这些更改在当前环境中注册。 通过键入退出:
exit
现在重新登录。
访问BitTorrent同步Web界面
现在我们已经设置好了所有东西,我们可以开始看看管理Web界面,把这些部分拉在一起。
首先,您需要使用“https”协议在端口“8888”上的Web浏览器中访问这两个服务器。 这应该看起来像这样:
https://server_domain_or_IP:8888
您很可能会看到如下所示的警告:
这只是一个警告,告诉您浏览器无法识别签署SSL证书的一方。 由于我们生成自签名的SSL证书,这是完全有道理的,是预期的,我们可以安全地点击“仍然继续”或任何类似的按钮,你的浏览器给你。
系统将提示您输入在配置BitTorrent Sync时选择的用户名和密码。 在我们的例子中,凭据admin
和password
,但你(尤其是密码)可能会有所不同。
一旦你认证,你应该看到主要的BitTorrent Sync Web界面:
将共享目录添加到第一个服务器
我们无法开始将我们配置的目录添加到Web界面。
点击右上角的“添加文件夹”按钮。 您将获得一个用于向BitTorrent Sync界面添加目录的对话框:
滚动到/shared
我们创建目录,并点击它。 它应该用正确的值填充“路径”字段。
在“秘密”字段旁边,单击“生成”按钮为目录创建密钥:
点击右下角的“添加”按钮。 您的目录将添加到BitTorrent Sync Web UI。
现在,我们有一个新的按钮。 点击与相关联的“秘密/ QR”按钮/shared
您刚才添加目录:
您将看到一个对话框,为您提供此目录的密码。 这是将此目录与另一个BitTorrent Sync实例同步的方法。
该软件允许您设置对目录的完全访问(读写访问)或只读访问。 对于我们的指南,我们将配置完全访问以允许双向同步,但这只是一个首选项。
您将需要从此界面复制“完全访问”密码,以设置与您的第二个服务器的同步。
将共享目录和密钥添加到第二个服务器
现在我们已经配置了第一个服务器来共享其目录,我们需要设置我们的第二个服务器。
我们将通过大部分相同的步骤,略有变化。
再次登录Web界面,这次使用第二个服务器的域名或IP地址。 记住使用“https”和端口“8888”:
https://second_server_domain_or_IP:8888
您将再次看到SSL警告,您需要进行身份验证。 你会来到我们之前看到的同一个空界面。
点击“添加文件夹”按钮,就像我们以前做的。 选择/shared
,我们创建的目录。
在这一点上,而不是生成一个新的秘密,我们要使用的是第一个服务器上生成的秘密。 这将允许这两个实例通信,因为每个秘密是唯一的并且随机生成的。 从第一台服务器输入密码:
完成后,单击右下角的“添加”按钮。
稍后,主界面中的“已连接的设备和状态”列将填充协同服务器的相关信息:
这意味着您的服务器正在彼此通信并可以同步内容。
测试BitTorrent同步
让我们测试我们当前的设置。
在任意一个服务器的(也不要紧哪一个,如果你配置的完全访问权限),移动到/shared
目录:
cd /shared
我们可以通过键入以下内容创建10个示例文件:
touch file{1..10}
稍后,在您的其他服务器上,您应该可以看到您创建的文件:
# On the second server
cd /shared
ls -l
total 0
-rw-rw-r-- 1 btsync btsync 0 May 19 17:07 file1
-rw-rw-r-- 1 btsync btsync 0 May 19 17:07 file10
-rw-rw-r-- 1 btsync btsync 0 May 19 17:07 file2
-rw-rw-r-- 1 btsync btsync 0 May 19 17:07 file3
. . .
如您所见,我们的文件已同步。 如果你看看web界面,但这个同步没有注册。 这是因为这些文件不包含任何实际数据。
我们将测试是否可以通过从第二个服务器向这些文件写入数据来检测何时传输带有内容的文件。 这也将允许我们测试我们可以将更改同步到第一个服务器。
在第二个服务器上,您可以通过键入以下内容将短语“某些内容”写入您创建的每个文件:
for item in /shared/file{1..10}; do echo "some content" > $item; done
几秒钟后,第一个服务器上的文件应显示您添加的内容:
# On first server
cat /shared/file1
some content
您还应该看到,Web界面也已更新,以反映文件数量和已在服务器上同步的空间量:
如果这是工作,您已成功配置BitTorrent同步镜像服务器之间的更改。
结论
您现在应该有一个灵活的设置,允许您在远程服务器之间安全地传输文件。 此外,此配置允许您通过利用SSL的安全连接管理服务。
应用程序本身非常灵活,可以以各种方式使用。 一些有用的功能是在移动设备上扫描秘密作为QR码的能力,配置只读访问内容的能力,以及为客户端提供一次性使用秘密的能力。 您还可以将服务器配置为仅与特定主机通信。
BitTorrent的同步服务还提供了一个简单的版本控制系统,它采用了隐藏./SyncArchive
在共享目录目录保留旧版本文件。 如果您想要确保文件同步而不影响其他服务,您还可以实施速率限制等限制。