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
不是实际路径,指代前面的’资源名’,举例www
和ftp
查看服务器开放了哪些资源
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选项来指定不同的备份文件前缀。filename)存放在在目录下。
8 —backup-dir 将备份文件(如
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的空间