rsync文件同步使用说明

常用参数

-a 归档模式(最常用,替代-r参数,递归传输并保持文件属性,等同于-rlptgoD)
-v 显示执行过程明细
-z 压缩模式
-n 模拟执行
-i 显示传输文件的路径
-P 显示文件传输进度
--exclude 指定排除不进行同步的文件/目录,rsync在使用排除路径的时候对于路径的解析比较特殊,它使用相对路径是从待同步的路径开始,比如待同步目录为/tmp/a/b,则相对于b目录以b目录作为排除路径的基准,比如待同步目录为/tmp/a,则相对于a目录以a目录作为排除路径的基准。具体写法,可以使用-ni参数查看rsync命令实际执行使用的路径

传输方式

方式一:使用SSH协议

rsync默认使用SSH协议通过管道进行通信
rsync -av /tmp/src root@192.168.1.2:/tmp/dest

方式二:使用rsync协议

另外,可以通过rsync daemon,使用资源模块通过socket通信的方式传输文件(需要服务端已开启rsync daemon守护进程)
形式一:使用rsync风格双冒号::
rsync -av /tmp/src 192.168.1.2::moudle1
形式二:使用url风格rsync://
rsync -av /tmp/src rsync://192.168.1.2/moudle1
服务端编辑配置文件 /etc/rsyncd.conf
重启服务 systemctl restart rsyncd.service
(实际使用时,编辑完配置文件后会自动生效不需要重启服务)

### 全局配置参数 ###
uid = root #rsync服务的运行用户,默认是nobody
gid = root #rsync服务的运行组,默认是nobody
log file = /var/log/rsyncd.log #指定rsync的日志文件,而不把日志发送给syslog
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 .7z .rar #指定哪些文件不用进行压缩传输

### 局部参数资源模块配置,可以设置多个模块 ###
[moudle1]
#模块ID,不可重名
path = /tmp/dest #指定模块路径,必选项,启动rsync命令前该目录必须存在,rsync请求访问模块本质就是访问该路径
read only = false #关闭模块的只读模式,可以上传写入。所有模块默认情况下为只读模式
hosts allow = 192.168.1.1 #rsync访问IP白名单模式,在服务端配置文件中写入客户端的IP地址,以允许客户端IP访问该服务端IP,未写入的其他IP拒绝连接;多个IP使用空格分隔
auth users = test1 test2 #指定连接到该模块的用户列表,多个用户用空格分隔,只有指定的用户才能连接到该模块其他用户则不可以。如果设置了该参数,那么在客户端使用rsync命令时需要使用“用户名@服务端”的形式(而非像普通模式一样直接使用服务端地址)来指定客户端使用哪个用户进行连接,此用户列表为虚拟用户而非系统用户,用户名和对应密码保存在服务端的secrts file中。若不设置该参数则默认接受所有匿名连接
secrets file = /etc/rsyncd.users #服务端保存auth users用户列表的用户名和密码,每行包含一个username:passwd,需要设置文件权限为600

模块访问限制

使用模块的访问方式时,默认情况下,服务端开启rsync daemon守护进程后,客户端电脑不需要身份验证就可以直接向服务端同步文件,存在安全风险,因此需要对IP、user等做相应限制

IP访问限制

白名单模式:通过hosts allow设置白名单IP
黑名单模式:通过hosts deny设置黑名单IP
设置该参数表示rsync受到IP规则限制;不设置该参数表示任意IP均可连接

user访问限制

非交互式:不设置auth users,使用默认匿名形式直接访问;或者使用auth users,但在客户端执行rsync同步命令时使用--password-file参数自动调用密码文件(详见扩展说明)
交互式:设置auth users,使用指定虚拟用户访问(执行命令时需要手动输入该指定用户的密码)
设置该参数表示rsync受到连接用户限制(客户端需要使用用户名@服务端的形式发起连接);不设置该参数表示任意用户均可连接(客户端不需要写任何用户名,只写服务端即可)

如果IP、user两个参数同时设置,则rsync会同时受到这两个维度的限制

查询服务端守护进程已分配的资源模块列表

客户端执行命令
rysnc 192.168.1.2::
rsync rsync://192.168.1.2

关于源目录是否带斜杠/

同步的源目录不带斜杠/表示将目录整体复制,带斜杠/表示仅复制目录下的所有文件而不包括目录本身
rsync -av /tmp/src rsync://192.168.1.2/moudle1 #将src目录全部复制到远端,包含src目录本身
rsync -av /tmp/src/ rsync://192.168.1.2/moudle1 #将src目录下的所有文件复制到远端,不包含src目录本身

rsync同步示例

客户端:192.168.1.1,目录/tmp/src,确认已安装rsync工具
服务端:192.168.1.2,目录/tmp/dest,确认已安装rsync工具,并确认已开启守护进程
服务端编辑配置文件/etc/rsyncd.conf
重启服务 systemctl restart rsyncd.service
(实际使用时,编辑完配置文件后会自动生效不需要重启服务)
客户端执行同步命令
rsync -avzP /tmp/src root@192.168.1.2/tmp/dest #使用SSH协议方式同步
rsync -avzP /tmp/src rsync://192.168.1.2/moudle1 #使用daemon模块方式同步,下同
rsync -avzPin /tmp/src rsync://192.168.1.2/moudle1 #使用-in参数显示路径并测试同步执行情况
rsync -avzP /tmp/src --exclude=files/a.txt rsync://192.168.1.2/moudle1 #排除某个文件/目录
rsync -avzP /tmp/src --exclude={files/a.txt,files/b.txt} rsync://192.168.1.2/moudle1 #排除多个文件/目录
rsync -avzP /tmp/src rsync://test1@192.168.1.2/moudle1 #指定使用虚拟用户test1
rsync -avzP /tmp/src --password-file=/etc/rsyncd.test1.passwd rsync://test1@192.168.1.2/moudle1 #服务端指定使用虚拟用户test1后,客户端设置自动读取密码文件,客户端只复制较新的文件

扩展说明

  • 默认情况下,rsync只检查文件的大小和最后修改日期是否发生变化,如果发生变化,就重新传输;如果使用-c或--checksum参数,则通过判断文件内容的校验和,决定是否重新传输
  • --delete 从目标端目录中删除源目录中不存在的文件,即保证目标目录是源目标的镜像
  • -i 表示输出源目录与目标目录之间文件差异的详细情况
  • --include 指定同步时要包括的文件,一般与--exclude结合使用
  • -v 显示rsync过程中详细信息,可以使用"-vvvv"获取更详细信息
  • --port 连接daemon时使用的端口号,默认为873端口
  • --password-file daemon模式时客户端使用的密码文件,可以从中读取密码从而实现非交互式。这不是远程shell认证的密码,而是rsync模块认证的密码,例如--password-file=/etc/rsyncd.user1.passwd,设置文件权限为600,密码文件中只保存密码不写用户名,且只有第一行才是传递的密码,其余所有的行都会被自动忽略。注意,这个文件存放在命令发起端电脑,执行rsync同步命令时作为参数来使用
  • daemon方式使用模块时,将文件从客户端推送到服务端时,文件的属主和属组是配置文件中指定的uid和gid。但是客户端将文件从服务端拉取下来的时候,文件的属主和属组是客户端正在操作rsync的用户身份,因为执行rsync程序的用户为当前用户
  • --update或-u 仅复制自上次同步以来已更改的文件,仅将源目录中较新的文件复制到目标目录,而不复制那些已经复制过的文件

注意事项

  1. 关闭防火墙、SELinux(否则可能导致chroot错误)
  2. 使用用户验证时,注意设置用户对文件夹的写权限
  3. 根据需求考虑是否使用use chroot = false,默认为true
  4. 设置path等参数后,同一行的后面不能写#注释内容
  5. 检查网络状况,测试客户端连接到服务端默认873端口正常

参考资料:
https://www.cnblogs.com/f-ck-need-u/p/7220009.html

posted on 2024-11-08 15:08  越野兔  阅读(621)  评论(0)    收藏  举报

导航