注:本文基于rsync-3.1.2-6.el7_6.1编写

1、环境准备

机器

用途

192.168.0.100

rsync服务端

192.168.0.120

rsync客户端

2、服务端配置

  • 安装rsync

由于使用CentOS 7系统,因此,rsync已经安装好,如果没安装直接使用yum安装即可,

yum install -y rsync
  • 配置rsyncd.conf
[root@CentOS-7-4 /home]# cat /etc/rsyncd.conf 
uid = nobody
gid = nobody
use chroot = false
max connections = 4
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log 
lock file = /var/run/rsync.lock
transfer logging = yes

[test]
path = /testdir/
auth users = testuser
secrets file = /etc/rsyncd.secrets
read only = false
uid = root
gid = root

其中,
log file即为rsync日志,出现问题的时候查看这个来看报错信息
path即为test模块映射的目录,也就是你上传文件或者同步文件的目录
auth users即为test模块登录用户
secrets file即为存放用户名和密码的文件
read only表示目录是否只读,如果只读,则用户无法上传文件

其余选项可通过man手册查看,

man 5 rsyncd.conf
  • 配置用户及密码
    上面的配置文件我们制定了密码文件为/etc/rsyncd.secrets,因此我们要在这个文件中添加用户名和密码,
[root@CentOS-7-4 /home]# cat /etc/rsyncd.secrets
testuser:12345678

要注意的是,密码文件的权限不能过大,否则rsync命令会失败,服务端日志中会有如下报错,

secrets file must not be other-accessible (see strict modes option)

因此我们统一将密码文件权限设置为600,

chmod 600 /etc/rsyncd.secrets
  • 启动服务
    配置完了,直接启动服务即可,
systemctl start rsyncd

3、客户端配置

  • 同样需要安装rsync组件
  • 配置用户密码
    这一点比较坑,因为客户端密码格式和服务端不同,服务端中需要配置用户和密码,但是客户端只需要配置密码
[root@CentOS-7-2 /home]# cat /etc/rsyncd.secrets
12345678

如果你也和服务端一样配置用户名和密码,服务端中的日志就会一直报密码不匹配,

auth failed on module test from quay.io (192.168.0.100) for testuser: password mismatch

因为它将整个文件内容都当成密码。当然,密码文件权限仍然需要设置为600。

4、常用命令

1、客户端上传文件到服务端

[root@CentOS-7-2 /home]#  rsync -avz --progress --password-file=/etc/rsyncd.secrets test.sh rsync://testuser@192.168.0.120/test
sending incremental file list
test.sh
            902 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/1)

sent 525 bytes  received 35 bytes  1,120.00 bytes/sec
total size is 902  speedup is 1.61

该命令将当前目录下的test.sh文件,通过rsync上传到服务器192.168.0.120中定义的test模块的路径下,以上面配置为例,即上传到/testdir/目录

2、同步服务端目录文件

[root@CentOS-7-2 /home/test]# ls
.  ..
[root@CentOS-7-2 /home/test]# rsync -avz --progress --password-file=/etc/rsyncd.secrets rsync://testuser@192.168.0.120/test .
receiving incremental file list
./
test.sh
            902 100%  880.86kB/s    0:00:00 (xfr#1, to-chk=0/2)

sent 46 bytes  received 548 bytes  1,188.00 bytes/sec
total size is 902  speedup is 1.52
[root@CentOS-7-2 /home/test]# ls
.  ..  test.sh

该命令将服务器test模块定义的目录,同步到当前目录。

当然也可以同步指定文件,

rsync -avz --progress --password-file=/etc/rsyncd.secrets rsync://testuser@192.168.0.120/test/a/ni.txt .

该命令指定同步test模块对应路径下a目录下的ni.txt文件,即/testdir/a/ni.txt文件到当前目录。

更多特性,可以通过man手册查看,

man 1 rsync