rsync除了可以ssh方式以外,在远程主机上建立一个 rsync 的服务器,在服务器上配置好 rsync 的各种应 用,然后本机作为 rsync 的一个客户端去连接远程的 rsync 服务器。

1、建立并配置 rsync 的配置文件 /etc/rsyncd.conf

vim /etc/rsyncd.conf

加入如下配置:

#全局配置

#port=873     #指定在哪个端口启动 rsyncd 服务,默认是 873

log file=/var/log/rsync.log     # 指定日志文件

pid file=/var/run/rsyncd.pid    

#指定 pid 文件,这个文件的作用涉及到服务的启动以及停止等进程管理操作

#address=192.168.0.10

#指定启动 rsyncd 服务的 IP,假如你的机器有多个 IP,就可以指定其中一个启动rsyncd 服务,默认是在全部 IP 上启动

[test]    #块配置部分

path=/root/rsync    #指定数据存放的路径

use chroot=true    

#true|false 默认是 true,意思是在传输文件以前首先 chroot 到 path 参数所指定的目录下。实现额外的安全防护,但是缺点是需要以 roots 权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下 chroot 值为 true,如果你的数据当中有软连接文件的话建议设置成 false。

max connections=4    #指定最大的连接数,默认是 0 即没有限制

read only=no    #果为 true 则不能上传到该模块指定的路径下

list=true    

#指定当用户查询该服务器上的可用模块时该模块是否被列出,设true列出, false隐藏

uid=root    #指定传输文件时,以哪个用户的身份传输

gid=root    #指定传输文件时,以哪个组的身份传输

auth users=test    #指定传输文件时,以哪个用户/组的身份传输

secrets file=/etc/rsyncd.passwd

#指定密码文件,该参数连同上面的参数如果不指定则不使用密码验证,注意该密码文件的权限一定要是 600

hosts allow=192.168.0.101

#指定被允许连接该模块的主机,可以是 IP 或者网段,如果是多个,之间用空格隔开

hosts deny=192.168.0.101          #指定被拒绝连接该模块的主机

#当allow与deny同时存在,只有allow不匹配且deny匹配的才会拒绝连接

其实模块中的一些参数例如 use chroot, max connections, udi, gid, auth users, secrets file 以及 hosts allow 都可以配置成全局的参数。当然我给出的参数并不是所有的,你可以通过 man rsyncd.conf 获得更多信息。

2、编辑 secrets file

保存后要赋予 600 权限,如果权限不对,不能完成同步

vim /etc/rsyncd.passwd

test:test123 

chmod 600 /etc/rsyncd.passwd

3、启动 rsyncd 服务

rsync --daemon --config=/etc/rsyncd.conf

启动后,可以查看一下日志,并查看端口是否启动:

cat /var/log/rsync.log

netstat -lnp |grep 873

4、配置开机启动

请把命令 rsync --daemon --confg=/etc/rsyncd.conf 写入到 /etc/rc.d/rc.local 文件。

5、指定密码文件

可以在客户机上指定密码保存文件连接时不用输入密码,密码文件需要配置为600权限

vim /etc/pass   

加入 test 用户的密码: 

test123 

chmod 600 /etc/pass    修改密码文件的权限

在同步的时候,指定一下密码文件,就可以省去输入密码的步骤了:

rsync -avL test@192.168.0.10::test/test1/ /tmp/test8/ --password-file=/etc/pass