1351 words
7 minutes
Rsync:文件同步服务器
2024-10-07

Rsync:文件同步服务器#

介绍#

rsync不仅是一个同步工具,它更能作为文件的上传/下载工具。

怎么向服务器上传编译好的博客, scp?或者直接宝塔/1panel面板上传文件在线解压?

rsync适合以下场景,备份工程,打包前端工程上传,经常修改配置文件

安装#

  • Windows: 使用scoop包管理器

    scoop install cwrsync

  • Ubuntu Linux: APT

    apt install rsync -y

配置服务器#

TIP

没有对应的文件就自己新建

1.编辑/etc/default/rsync 启用daemon服务模式#

RSYNC_ENABLE=true

RSYNC_CONFIG_FILE=/etc/rsyncd/rsyncd.conf

2.编辑 /etc/rsyncd/rsyncd.conf#

# .service on /usr/lib/systemd/system/rsync.service
# 运行rsync服务的用户
uid=root
gid=root
# 最大连接数
max connections= 60
# log日志存放位置
log file = /var/log/rsync.log
# 进程相关
pid file=/var/run/rsyncd.pid
lock file = /var/lock/rsyncd
# 日志格式
log format = %t %a %m %f %b
# 日志级别
syslog facility=daemon
# 连接超时时间
timeout = 300
# 监听端口
port = 873
# 监听网卡地址
address = 0.0.0.0
# 允许访问的客户端网段
# hosts allow = 192.168.16.0/24  #仅限该网段访问
# hosts allow = 0.0.0.0
# 客户端可否获得服务项列表
use chroot = yes
# 校验密码本访问权限
strict modes = false  #若为true,则需要设置rsync.secrets的权限始终为600
read only = no    # 只读
write only = no   # 只写
# 入站权限分配'D'表示目录,'F'表示子文件
# 'u'表示当前用户,'g'表示当前同组用户,'o'表示其它用户
# 当前示范'774'权限
incoming  chmod  = Du=rwx,Dg=rwx,Fu=rwx,Fg=rwx,Fo=r 
# 客户端上传的此类文件不在传输时压缩
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

# 可访问性模块单元
# 示例配置"www",客户端请求时后缀就为www
[www]
path = /opt/web  # 需要操作的目录
auth users = admin christine  #认证用户","隔开多租户
secrets file = /etc/rsyncd/rsync.secrets   #认证密码校验文件
CAUTION

正式使用前,请删除上述配置中的中文单行注释

3.编辑密码文件 /etc/rsyncd/rsync.secrets#

TIP

设置密钥文件权限 chmod 600 rsync.secrets

格式username:password

user:passwd
admin:123456
CAUTION

注意: 客户端密码校验文件rsync.secrets只写密码value,多个密码换行写

4.守护进程#

编辑/usr/lib/systemd/system/rsync.service

[Unit]
Description=fast remote file copy program daemon
ConditionPathExists=/etc/rsyncd/rsyncd.conf
After=network.target
Documentation=Go to Delete log file run rm /var/log/rsync.log
[Service]
ExecStart=/usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf --no-detach 
RestartSec=1
Restart=on-failure
ProtectSystem=full
#ProtectHome=on|off|read-only
PrivateDevices=on
NoNewPrivileges=on
[Install]
WantedBy=multi-user.target

5.服务控制#

启动 systemctl start rsync

重新启动 systemctl restart rsync

停止 systemctl stop rsync

查看状态 systemctl status rsync

自启动 systemctl enable rsync

6.注意事项#

/etc/rsyncd/rsyncd.conf

TIP

当且仅当客户端连接使用-r参数代替-a时:

income chmod配置项才会生效

用法#

服务端选定一个或多个模块

比如/etc/rsyncd/rsyncd.conf这里有两个模块, www和ftp

# 可访问性模块单元
# 示例配置"www",客户端请求时后缀就为www
[www]
path = /opt/web
auth users = admin
secrets file = /etc/rsyncd/rsync.secrets

[ftp]
path = /opt/web
auth users = ftp 
secrets file = /etc/rsyncd/rsync.secrets

语法#

rsync -<opention> <本地文件/夹> user@host::module

注意:module 不是实际路径,指代前面的’资源名’,举例wwwftp

查看服务器开放了哪些资源#

rsync rsync://192.168.31.1

上传文件#

CAUTION

./target/* 不能写成 .\target*
否则会把一个整体上传并成为隐藏文件夹

# rsync <option> <dir> <user@remote>::<module>
rsync -rv ./target/* admin@192.168.31.1::www/
# -r 必须参数表示递归,-v在控制台中输出
# ./target/* 匹配当前目录target下的全部子文件/夹
# admim , 在模块单元中预设的用户名
# 等同于
rsync -rv ./target/* rsync://admim@192.168.31.1/www

下载文件#

将上传文件的命令颠倒顺序

# 服务端 www -> 本地dist
rsync -rv rsync://admim@192.168.31.1/www dist

场景:将Dist上传到Nginx#

网页更新发布时,操作是把dist中网页复制到Nginx分发页面下

rsyncd.conf 中定义模块并指向Nginx页面

在本地项目中新建密码文件rsync.secrets

rsync -rv ./dist/* admin@192.168.31.1::www/

编写Powershell脚本, 实现无需密码登录

WARNING

客户端rsync.secrets中只写密码

$rsynchost= 1.1.1.1
$user= admin
$authfile="rsync.secrets"
rsync -rvz --progress --password-file=$authfile ./dist/* rsync://$user@$rsynchost/www

更多#

多的内容自己Google一下

1 -v, —verbose 详细模式输出
2 -q, —quiet 精简输出模式
3 -c, —checksum 打开校验开关,强制对文件传输进行校验
4 -a, —archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
5 -r, —recursive 对子目录以递归模式处理
6 -R, —relative 使用相对路径信息
7 -b, —backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为filename。可以使用—suffix选项来指定不同的备份文件前缀。
8 —backup-dir 将备份文件(如
filename)存放在在目录下。
9 -suffix=SUFFIX 定义备份文件前缀
10 -u, —update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
11 -l, —links 保留软链结
12 -L, —copy-links 想对待常规文件一样处理软链结
13 —copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
14 —safe-links 忽略指向SRC路径目录树以外的链结
15 -H, —hard-links 保留硬链结
16 -p, —perms 保持文件权限
17 -o, —owner 保持文件属主信息
18 -g, —group 保持文件属组信息
19 -D, —devices 保持设备文件信息
20 -t, —times 保持文件时间信息
21 -S, —sparse 对稀疏文件进行特殊处理以节省DST的空间

Rsync:文件同步服务器
https://fuwari.vercel.app/posts/rsync/
Author
Christine
Published at
2024-10-07