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的安全也是很重要的。