0x01 前言

rsync是一款很好的文件同步开源软件,可是数据在传输过程中却很容易收到截取、监听,从而造成数据泄漏。使用SSH为rsync提供隧道保护,能大大增强安全性。

0x02 SSH

首先需要在源主机上配置SSH。为了安全,请不要使用root用户进行操作,在这里我新建一个用户并配置密钥:

#添加用户
[root@web ~]# useradd rsyncuser1

#以rsyncuser1用户登陆
[root@web ~]# su rsyncuser1

#进入rsyncuser1用户根目录
[rsyncuser1@web root]$ cd

#建立SSH密钥,请不要为key输入密码!
[rsyncuser1@web ~]$ ssh-keygen -t rsa -b 4096

#重命名文件
[rsyncuser1@web ~]$ mv .ssh/id_rsa.pub .ssh/authorized_keys

#打印私钥
[rsyncuser1@web ~]$ cat .ssh/id_rsa

#复制一下内容到本地,以便后续步骤使用
-----BEGIN RSA PRIVATE KEY-----
...省略
-----END RSA PRIVATE KEY-----

这里要注意一点:建立SSH密钥时请不要为私钥设置密码!在要求输入密码的步骤请直接按回车。

0x03 rsync

这里配置一个简单的rsync服务器:

#返回root用户
[datasync@web ~]$ su

#建立需要同步的文件夹
[root@web ~]# mkdir -p /usr/local/rsyncproj

#安装rsync
[root@web ~]# yum install rsync -y

#打开rsync配置文件
[root@web ~]# vim /etc/rsyncd.conf

#在文件最底部添加以下内容

#名称,可自定义
[rsyncproj]

#需要同步的文件夹的路径
path = /usr/local/rsyncproj

#允许连接的IP地址
hosts allow = 10.1.1.14

#禁止白名单以外的IP连接
hosts deny = *

#允许列出文件
list = true

uid = rsyncuser1
gid = rsyncuser1
read only = false

完成后通过以下命令启动rsync并设为开机启动:

#立即启动
[root@web ~]# systemctl start rsyncd

#设为开机启动
[root@web ~]# systemctl enable rsyncd

0x04 客户机

首先需要将在第二步中的SSH私钥粘贴到客户机中:

#建立新文件
[root@web ~]# vim rsync_host_SSH_key.key

#将以下内容粘贴到文件中并保存
-----BEGIN RSA PRIVATE KEY-----
...省略
-----END RSA PRIVATE KEY-----

然后建立本地文件夹:

[root@client ~]# mkdir /root/rsyncproj

最后安装rsync并通过以下命令进行同步:

#安装rsync
[root@client ~]# yum install rsync -y

#同步
[root@client ~]# rsync -avHPe "ssh -i /root/rsync_host_SSH_key.key" [email protected]:/usr/local/rsyncproj/* /root/rsyncproj/

如果你的SSH服务使用的不是默认的TCP 22端口,请通过以下命令指定端口:

[root@client ~]# rsync -avHPe "ssh -p 222 -i /root/rsync_host_SSH_key.key" [email protected]:/usr/local/rsyncproj/* /root/rsyncproj/

0x05 结语

为了达到自动化同步的效果,可以将命令添加到crond中定时运行:

#打开cron文件
[root@client ~]# vim /etc/crontab

#在文件最后加入
30 4 * * * root rsync -avHPe "ssh -p 222 -i /root/rsync_host_SSH_key.key" [email protected]:/usr/local/rsyncproj/* /root/rsyncproj/

#保存后重新加载crond服务
[root@client ~]# systemctl reload crond

我家里的绝大多数服务都使用数字证书加密,可是数字证书只能通过其中一台安全设备每天定时生成。数字证书生成后再通过rsync分发到各个虚拟机中,最后由虚拟机中的脚本进行加载。所以rsync的安全也是很重要的。