1 简介
rsync用于文件同步,它可以在本地与远程主机之间,或者两个本地目录之间同步文件。
2 安装
yum install rsync
注:传输的双方都必须安装rsync。
3 基本用法
3.1 本地同步
基本格式 rsync [options] source destination。其中,source 是源目录或文件,destination 是目标目录或文件。
示例:
本地目录 source 同步到目标目录 destination,并排除所有 .txt 文件:
rsync -av –exclude=’*.txt’ source/ destination
或者rsync -av –exclude ‘*.txt’ source/ destination
排除某个目录里面的所有文件,但不希望排除目录本身:
rsync -av –exclude ‘dir1/*’ source/ destination
多个排除模式,用多个–exclude参数:
rsync -av –exclude ‘file1.txt’ –exclude ‘dir1/*’ source/ destination
如排除模式很多,可以写入一个文件,每个模式一行,然后用–exclude-from参数指定文件:
rsync -av –exclude-from=’exclude-file.txt’ source/ destination
3.2 远程同步
3.2.1 SSH方式(使用操作系统用户)
基本格式 rsync [options] source user@remote_host:destination。
示例:
本地目录 source 同步到远程主机上的 destination 目录:
rsync -av source/ username@remote_host:destination
如需要指定 SSH 命令参数,如使用特定端口,使用 -e 选项:
rsync -av -e ‘ssh -p 2234’ source/ user@remote_host:/destination
3.2.2 守护程序方式(不使用操作系统用户,使用虚拟用户密码)
如果另一台主机安装并运行了rsync守护程序(类似服务端),则可以用rsync://(默认端口873)进行传输。具体写法是服务器与目标目录之间使用双冒号分隔::。
rsync -av source/ remote_host::module/destination
注:上面地址中的module不是实际路径名,而是rsync配置文件中指定的一个资源名,由管理员分配。
查询rsync守护程序分配的所有module列表,执行下面命令:
rsync rsync://remote_host
除使用双冒号,rsync 协议也可以直接用rsync://指定地址。
rsync -av source/ rsync://remote_host/module/destination
4 守护程序配置
4.1 rsync服务端配置示例
4.1.1编辑rsync配置文件/etc/rsyncd.conf,添加如下内容:
# 全局配置
uid = nobody
gid = nobody
pid file = /var/run/rsyncd.pid
fake super = yes #允许在同步过程中保留文件的所有属性信息
use chroot = yes
read only = no
log file = /var/log/rsyncd.log
transfer logging = yes
timeout = 300
#第一个模块:公共下载区(匿名只读,没有 auth users,允许匿名访问)
[public_download]
path = /app/rsync/public
comment = Public Download Area (Read-Only)
read only = yes
list = yes
#第二个模块:备份目录(需要认证,可读写)
[backup]
path = /app/rsync/backup
comment = Secure Backup Directory
read only = no
list = yes
auth users = backup_admin
secrets file = /etc/rsyncd.secrets
#第三个模块:日志上传(需要认证,只写)
[log_upload]
path = /app/rsync/logs
comment = Log Upload Directory (Write-Only)
read only = no
write only = yes #客户端只能上传,不能下载或列表
list = no
auth users = logger
secrets file = /etc/rsyncd.secrets
保存退出。
重启rsync服务:systemctl restart rsyncd
查看rsync服务状态:systemctl status rsyncd
设置服务开机自启:systemctl enable rsyncd
4.1.2创建虚拟用户密码文件,并授权为600
echo “backup_admin:p@ss123w0rd” >/etc/rsyncd.secrets
echo “logger:p@ss456w0rd” >>/etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets
4.1.3创建目录,并授权
mkdir -p /app/rsync/{public,backup,logs}
chown -R nobody:nobody /app/rsync/
4.2 rsync客户端配置
rsync客户端仅需配置虚拟用户的密码,并授权为 600
4.2.1虚拟用户密码配置至文件中
echo “p@ss123w0rd” >/etc/rsync.pass.backup_admin
echo “p@ss456w0rd” >>/etc/rsync.pass.logger
chmod 600 /etc/rsync.pass.backup_admin
chmod 600 /etc/rsync.pass.logger
4.2.2 客户端验证
匿名访问验证:
rsync -av /local/path/ rsync://remote_host/public_download/remote/path/
或rsync -av /local/path/ remote_host::public_download/remote/path/
示例:
不能上传rsync -av public/list.txt 192.168.195.186::public_download/
可以下载rsync -av 192.168.195.186::public_download/ public/


可读写验证:
上传rsync -av /backup/app1.tar.gz backup_admin@192.168.195.186::backup –password-file=/etc/rsync.pass.backup_admin
下载rsync -av backup_admin@192.168.195.186::backup/ /backup/ –password-file=/etc/rsync.pass.backup_admin


只写验证:
可以上传rsync -av /logs/messages.log logger@192.168.195.186::log_upload/ –password-file=/etc/rsync.pass.logger
不能下载rsync -av logger@192.168.195.186::log_upload/ /logs/ –password-file=/etc/rsync.pass.logger

注:nobody,backup_admin关系见下图:

5 配置文件常用参数说明
rsyncd.conf文件通常由两部分组成:
全局参数:设置在文件开头,对所有模块生效。
模块定义:以 [模块名] 的形式开始一个模块节,其后的参数只对该模块生效,直到下一个模块节开始。
全局参数:
| 参数 | 说明 | 示例 |
pid file | 指定 rsync 守护进程写入其 PID 的文件路径。用于管理服务。 | pid file = /var/run/rsyncd.pid |
port | 指定 rsync 守护进程监听的端口号,默认为 873。 | port = 873 |
address | 指定 rsync 守护进程绑定的 IP 地址。默认为所有地址。 | address = 192.168.195.100 |
uid | 守护进程在处理文件时使用的默认用户 ID。建议设为 nobody 或一个无特权用户。 | uid = nobody |
gid | 守护进程在处理文件时使用的默认组 ID。建议设为 nogroup 或 nobody。 | gid = nogroup |
use chroot | 是否在传输前将客户端锁定到模块路径。出于安全考虑,强烈建议设为 yes。 | use chroot = yes |
read only | 全局默认的只读设置。如果为 yes,客户端不能上传文件。 | read only = yes |
hosts allow | 允许连接的主机/IP/网段,用空格或逗号分隔。支持通配符。 | hosts allow = 192.168.195.0/24, 10.0.0.100 |
hosts deny | 拒绝连接的主机/IP/网段。默认为允许所有。 | hosts deny = * |
max connections | 最大并发连接数。0 表示无限制。 | max connections = 10 |
timeout | 连接超时时间(秒)。 | timeout = 300 |
log file | 指定守护进程的日志文件路径。 | log file = /var/log/rsyncd.log |
transfer logging | 是否记录传输日志。 | transfer logging = yes |
dont compress | 指定哪些文件不进行压缩传输。默认会压缩以节省带宽。 | dont compress = *.gz *.zip *.bz2 |
motd file | 指定一个 “Message Of The Day” 文件,客户端连接时会显示其内容。 | motd file = /etc/rsyncd.motd |
模块参数:
| 参数 | 说明 | 示例 |
path | (必需) 该模块在服务器上对应的物理路径。 | path = /data/backup |
comment | 模块的描述信息,客户端使用 rsync host:: 命令时会显示。 | comment = Our main backup repository |
read only | 覆盖全局设置。该模块是否只读。 | read only = no |
write only | 该模块是否只写(较少使用)。 | write only = no |
list | 当客户端列出所有可用模块时,是否显示此模块。 | list = yes |
auth users | 允许访问该模块的用户名列表,用逗号分隔。这些用户不是系统用户。如果未设置,则允许匿名连接。 | auth users = tom, jerry |
secrets file | 与 auth users 配合使用。指定存储 用户名:密码 的文件路径。该文件权限必须为 600。 | secrets file = /etc/rsyncd.secrets |
hosts allow | 覆盖全局设置。允许访问此模块的客户端。 | hosts allow = 192.168.195.50 |
hosts deny | 覆盖全局设置。拒绝访问此模块的客户端。 | hosts deny = * |
max connections | 覆盖全局设置。此模块的最大并发连接数。 | max connections = 2 |
exclude / exclude from | 排除文件/目录列表。exclude 直接跟模式,exclude from 跟一个文件路径,该文件包含排除模式列表。 | exclude = .tmp ~/exclude from = /etc/rsyncd.excludes |
include / include from | 包含文件/目录列表。与 exclude 逻辑相反。 | include = important_dir/ |
timeout | 覆盖全局设置。此模块的连接超时时间。 | timeout = 600 |
dont compress | 覆盖全局设置。此模块中不压缩的文件类型。 | dont compress = *.jpg *.mp4 |
lock file | 该模块的锁文件路径。用于支持 max connections。 | lock file = /var/run/rsyncd.%R.lock |