用 Syncthing 实现与云服务器同步文件

2017-7-11 23:30 Herald 1095 Syncthing云计算云服务器文件同步

Syncthing 是开源免费的文件同步工具,通常用它同步多台电脑之间的文件,它同样适合通过互联网同步文件,文件同步全程被高强度加密,安全快捷。

本文将在运行 ubuntu server 17.04 x86_64 系统的云服务器上安装 Syncthing,最终实现与本地计算同步文件。

准备工作

如果你还没有云服务器,请参考下列指南创建:

在继续本指南之前,你应该先了解:

安装 Syncthing

第一步 使用 SSH 连接并登陆到云服务器

192:~ Herald$ ssh root@45.55.45.55
Welcome to Ubuntu 17.04 (GNU/Linux 4.10.0-26-generic x86_64)
......
root@ubuntu-512mb-sfo1-01:~#

第二步 下载并安装 Syncthing

使用 wget 命令下载最新版本 Syncthing 软件包:

root@ubuntu-512mb-sfo1-01:~# wget https://github.com/syncthing/syncthing/releases/download/v0.14.32/syncthing-linux-amd64-v0.14.32.tar.gz

使用 tar 命令解压软件包:

root@ubuntu-512mb-sfo1-01:~# tar zxvf syncthing-linux-amd64-v0.14.32.tar.gz

syncthing 二进制文件复制到 /usr/bin 目录:

root@ubuntu-512mb-sfo1-01:~# sudo cp syncthing-linux-amd64-v0.14.32/syncthing /usr/bin/

第三步 设置自启动

由于我们要将 syncthing 运行在云服务器上,且通常没有用户登录,因此,应该将 Syncthing 注册为系统级服务。

将系统级服务配置文件复制到 /etc/systemd/system 目录:

root@ubuntu-512mb-sfo1-01:~# sudo cp syncthing-linux-amd64-v0.14.32/etc/linux-systemd/system/syncthing@.service /etc/systemd/system/

重命名服务配置文件:

特别注意:这里我们把服务配置文件 syncthing@.service 改名为 syncthing@root.service。即指定 syncthing 将以 root 用户身份运行。虽然在使用上没有问题,但这潜藏着巨大的安全风险。正确的做法是参照《Ubuntu 16.04 服务器初始化设置指南》创建一个普通用户,并将以下命令中的 root 修改为你创建的用户名。

root@ubuntu-512mb-sfo1-01:~# mv /etc/systemd/system/syncthing@.service /etc/systemd/system/syncthing@root.service

设置 syncthing 开机启动:

root@ubuntu-512mb-sfo1-01:~# systemctl enable syncthing@root.service Created symlink /etc/systemd/system/multi-user.target.wants/syncthing@root.service → /etc/systemd/system/syncthing@root.service.

启动 syncthing:

root@ubuntu-512mb-sfo1-01:~# systemctl start syncthing@root.service

有关 Syncthing 的安装,您还可以参考《Syncthing 同步工具跨平台安装指南》。

配置 Syncthing

配置远程访问

由于 syncthing 默认只允许本地访问管理界面,为了实现通过互联网访问管理界面,需要修改 syncthing 的配置文件:

root@ubuntu-512mb-sfo1-01:~# nano ~/.config/syncthing/config.xml

将配置文件中的 <address>127.0.0.1:8384</address> 修改为 <address>0.0.0.0:8384</address>

现在就可以打开浏览器,使用 IP:8384 形式访问管理界面,例如,本例使用的云服务器公网 IP 为 45.55.45.55,如下图。

设置身份认证

由于我们在上一步开放了远程访问,初次访问管理界面会显示类似下图的提示,要求设置登录管理界面的用户名和密码,点击 设置 按钮。

如下图所示,在设置界面中输入用户名和密码。

提示:同时建议将 启动浏览器 取消勾选,这个功能是当启动 syncthing 时自动激活浏览器打开管理界面。在云服务器上 syncthing 以服务模式运行不需此功能。

设置完毕保存后,会要求重启 syncthing,点击 重启 Syncthing 按钮即可。

重启完成后,管理界面会自动刷新,并要求身份验证,只有正确输入前面设置的用户名和密码才能进入管理界面。

权限问题

在前面安装 Syncthing 的步骤中,我们已经提到了作为 syncthing 作为系统级服务运行的身份问题。由于我们设置了以 root 用户运行服务,因此 Syncthing 管理界面中给出了安全警告,意思是不应使用超级用户身份运行 Syncthing,而应使用普通用户身份。

改用普通账户

为了方便大家快速完成配置,接下来我们额外演示创建新用户并调整 Syncthing 服务以新的普通用户身份运行。

第一步 创建新的普通用户

使用 adduser 创建用户名为 demo 的普通用户,首先会要求为新用户设置密码并确认密码,接着会交互式的提出一些列的问题,可以按需设置,也可以直接按回车键跳过。

root@ubuntu-512mb-sfo1-01:~# adduser demo
Adding user `demo' ...
Adding new group `demo' (1000) ...
Adding new user `demo' (1000) with group `demo' ...
Creating home directory `/home/demo' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for demo
Enter the new value, or press ENTER for the default
 Full Name []: Demo
 Room Number []:
 Work Phone []:
 Home Phone []:
 Other []:
Is the information correct? [Y/n]

第二步 将新用户添加到 sudo 组

新用户在需要在必要时拥有管理员权限,就需要将其添加到 sudo 用户组。

root@ubuntu-512mb-sfo1-01:~# gpasswd -a demo sudo
Adding user demo to group sudo

第三步 设置 syncthing 服务以 demo 用户身份运行

停止 syncthing 程序

root@ubuntu-512mb-sfo1-01:~# systemctl stop syncthing@root.service

禁用 synchting 开机启动:

root@ubuntu-512mb-sfo1-01:~# systemctl disable syncthing@root.service
Removed /etc/systemd/system/multi-user.target.wants/syncthing@root.service.

修改服务配置文件:

root@ubuntu-512mb-sfo1-01:~# mv /etc/systemd/system/syncthing@root.service /etc/systemd/system/syncthing@demo.service

启用 syncthing 开机启动:

root@ubuntu-512mb-sfo1-01:~# systemctl enable syncthing@demo.service
Created symlink /etc/systemd/system/multi-user.target.wants/syncthing@demo.service → /etc/systemd/system/syncthing@demo.service.

启动 syncthing:

root@ubuntu-512mb-sfo1-01:~# systemctl start syncthing@demo.service

第四步 切换到 demo 用户

现在 syncthing 已经以 demo 用户身份运行了,但你会发现管理界面无法访问了。这是因为 syncthing 会使用运行它的用户的 home 目录中的配置文件启动程序,即 ~/.config/syncthing/config.xml

从 root 用户切换成 demo 用户,便于对配置文件做修改。若不切换用户,则编辑 /home/demo/.config/syncthing/config.xml

root@ubuntu-512mb-sfo1-01:~# su demo
To run a command as administrator (user "root"), use "sudo ".
See "man sudo_root" for details.

demo@ubuntu-512mb-sfo1-01:/root$

现在,返回上面 Syncthing 配置的步骤,重新设置一遍吧!

同步默认文件夹

Syncthing 程序运行后,会在当前用户的 home 目录创建名为 Sync 的文件夹作为默认的同步目录,如下图,/home/demo/Sync/ 即云服务器的默认同步目录。

运行 Syncthing 的系统被称为设备,要实现云服务器上的默认目录与本地同步,需要在本地与远程云服务器互相添加。管理界面右上角 操作 菜单中点击 显示 ID 即可查看设备编号。

复制云服务器的设备 ID,在本地 Syncthing 管理界面点击 添加远程设备 按钮,并将 ID 粘贴到下图所示的窗口,同时勾选下方的 Default Folder 选项后点击蓝色的 保存 按钮。

设备信息保存后,切换到云服务器的管理界面,会看到下图所示的提示。

点击 添加设备 按钮后,会显示下图所示的设置窗口,确认信息无误后,勾选下方的 Default Folder 选项后点击蓝色的 保存 按钮。

设备互相添加完毕,云服务器和本地管理界面的远程设备里面,都会显示对方的设备名称以及同步状态,如下图。

现在,放入本地计算机 /Users/Herald/Sync/ 目录的文件或文件夹就会实时的同步到云服务器,云服务器端也是如此,所有放入 /home/demo/Sync/ 目录的文件或文件夹也都会实时的同步到本地。

{{ headers["x-wp-total"] }} 条评论

{{ post_id = '2500' }}

回复 {{ reply_to }}