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 服务器初始化设置指南](https://www.getnas.com/2017/07/2266.html)》创建一个普通用户,并将以下命令中的 *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 同步工具跨平台安装指南](https://www.getnas.com/2017/07/2478.html)》。


## 配置 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`,如下图。

![](https://img.getnas.com/2017/07/Snip20170711_102.png)

### 设置身份认证

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

![](https://img.getnas.com/2017/07/Snip20170711_94.png)

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

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

![](https://img.getnas.com/2017/07/Snip20170711_96.png)

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

![](https://img.getnas.com/2017/07/Snip20170711_97.png)

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

![](https://img.getnas.com/2017/07/Snip20170711_99.png)

### 权限问题

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

![](https://img.getnas.com/2017/07/Snip20170711_100.png)


## 改用普通账户

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

### 第一步 创建新的普通用户

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

root@ubuntu-512mb-sfo1-01:~# adduser demo
Adding user demo' ... Adding new groupdemo' (1000) ...
Adding new user demo' (1000) with groupdemo' ...
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 选项后点击蓝色的 保存 按钮。

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

现在,放入本地计算机 <span class="ng-binding" data-original-title="/Users/Herald/Sync/">/Users/Herald/Sync/</span> 目录的文件或文件夹就会实时的同步到云服务器,云服务器端也是如此,所有放入 <span class="ng-binding" data-original-title="/home/demo/Sync/">/home/demo/Sync/</span> 目录的文件或文件夹也都会实时的同步到本地。