跳转至

前言

rsync 在进行数据同步之前需要先进行用户身份验证, 有两种协议方式进行身份验证:SSH协议与rsync协议(rsync协议的默认端口为873)

  • SSH协议验证登录方式:使用SSH协议作为基础进行用户身份认证(也就是拿GNU/Linux本身的系统用户和密码做验证),然后进行数据同步。
  • rsync协议验证登录方式:使用rsync协议进行用户身份认证(非GNU/Linux本身的系统用户,类似于vsftpd虚拟用户),然后进行数据同步。

在具体演示rsync同步之前,您需要使用rsync命令。 在Rocky Linux 8中,默认安装了rsync rpm软件包,版本为3.1.3-12,如下所示:

[root@Rocky ~]# rpm -qa|grep rsync
rsync-3.1.3-12.el8.x86_64
基本格式:rsync  [选项]  原始位置  目标位置
常用的选项:
-a  :归档模式,递归且保留文件对象的属性,等同于-rlptgoD(没有-H、-A、-X)
-v  :显示同步过程的详细信息
-z  :在传输文件时进行压缩
-H  :保留硬链接文件
-A  :保留ACL权限
-X  :保留chattr权限
-r  :递归模式,包含目录以及子目录中所有的文件
-l  :对于符号链接文件仍然保留
-p  :保留文件属性的权限
-t  :保留文件属性的时间
-g  :保留文件属性的所属组(仅限超级用户使用)
-o  :保留文件属性的所有者(仅限超级用户使用)
-D  :保留设备文件以及其他特殊文件

作者个人常用:rsync -avz 原始位置 目标位置

环境说明

说明
Rocky Linux 8(Server) 192.168.100.4/24
Fedora 34(client) 192.168.100.5/24

您可以使用 Fedora 34 进行上传与下载

graph LR;
RockyLinux8-->|pull/下载|Fedora34;
Fedora34-->|push/上传|RockyLinux8;

您也可以使用 Rocky Linux 8 进行上传与下载

graph LR;
RockyLinux8-->|push/上传|Fedora34;
Fedora34-->|pull/下载|RockyLinux8;

基于SSH协议的演示

提示

在这里,Rocky Linux 8 和 Fedora 34 都使用root用户登录。 Fedora 34是客户端,Rocky Linux 8是服务器。

pull/下载

既然是基于SSH协议,我们首先在服务器中创建一个用户:

[root@Rocky ~]# useradd testrsync
[root@Rocky ~]# passwd testrsync

在客户端这边,我们pull/下载过来,服务器的这个文件为/rsync/aabbcc

[root@fedora ~]# rsync -avz testrsync@192.168.100.4:/rsync/aabbcc /root
testrsync@192.168.100.4 ' s password:
receiving incremental file list
aabbcc
sent 43 bytes received 85 bytes 51.20 bytes/sec
total size is 0 speedup is 0.00
[root@fedora ~]# cd
[root@fedora ~]# ls
aabbcc
传输成功。

提示

如果服务器的SSH端口不是默认的22,您可以使用类似这样的方式指定端口——rsync -avz -e 'ssh -p [port]'

push/上传

[root@fedora ~]# touch fedora
[root@fedora ~]# rsync -avz /root/* testrsync@192.168.100.4:/rsync/
testrsync@192.168.100.4 ' s password:
sending incremental file list
anaconda-ks.cfg
fedora
rsync: mkstemp " /rsync/.anaconda-ks.cfg.KWf7JF " failed: Permission denied (13)
rsync: mkstemp " /rsync/.fedora.fL3zPC " failed: Permission denied (13)
sent 760 bytes received 211 bytes 277.43 bytes/sec
total size is 883 speedup is 0.91
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1330) [sender = 3.2.3]

提示权限拒绝,如何处理?

首先查看 /rsync/ 这个目录的权限。 很明显没有w权限, 我们可以使用setfacl赋予权限:

[root@Rocky ~ ] # ls -ld /rsync/
drwxr-xr-x 2 root root 4096 November 2 15:05 /rsync/
[root@Rocky ~ ] # setfacl -mu:testrsync:rwx /rsync/
[root@Rocky ~ ] # getfacl /rsync/
getfacl: Removing leading ' / ' from absolute path names
# file: rsync/
# owner: root
# group: root
user::rwx
user:testrsync:rwx
group::rx
mask::rwx
other::rx

再次尝试,成功!

[root@fedora ~ ] # rsync -avz /root/* testrsync@192.168.100.4:/rsync/
testrsync@192.168.100.4 ' s password:
sending incremental file list
anaconda-ks.cfg
fedora
sent 760 bytes received 54 bytes 180.89 bytes/sec
total size is 883 speedup is 1.08

Author: tianci li

Contributors: Steven Spencer, Ganna Zhyrnova