002 rsync守护进程传输方式详解
传输模式
1、本地方式(类似于cp,不支持推送和拉取,只是单纯的复制)
2、远程方式(类似于scp,又不同于scp)
3、守护进程方式(客户端和服务端)
本地方式
#语法
rsync [参数] 源文件(可多个) 目标地址 本地路径
#类似于cp,但是cp是全量复制并且会修改文件属性,rsync是增量复制,会保证文件属性不变
远程方式
#pull拉取语法
rsync [参数] 源文件(可多个) 目标地址 本地路径
#实例
[root@web1 ~]# rsync -avz root@192.168.15.100:/tmp/ ./
#push推送语法
rsync [参数] 要推送的文件 远程主机路径
#实例
rsync -avz ./back/ root@192.168.15.102:/root/
rsync
既可以本地拷贝也可以远程
-a #归档(压缩)模式,表示以递归方式传输文件,并保持所有文件属性
-z #在传输过程中进行压缩
-v #显示传输的过程
-n #执行一个没有实际更改的试运行,只会显示文件会被如何操作
-c #让自动跳过基于校验和而非默认的修改时间以及文件大小
--delete # 将备份的当作镜像,完全保持一致
--backup #对目标目录下已经存在的一个文件做备份
--backup-dir=/xxx/yyy #可以自定义一个目录去备份
--suffix="xxx" #可以指定区分的后缀名
--exclude # 排除
--exclude="xxx"
--include # 包含
rsync -a --include="*.txt" --exclude="*" /111/ /222/
#这个意思是会排除所有的文件,但是会包括1.txt,2.txt等文件
--bwlimit=MB/s #限速传输
--link-dest #指定基准目录
守护进程传输模式
#为什么使用守护进程模式
1、rsync传输时,使用的是系统用户和系统用户的密码,非常的不安全
2、使用普通用户又会出现权限问题
服务端
#配置rsync
#查找配置文件
[root@backup ~]# rpm -qc rsync
/etc/rsyncd.conf
/etc/sysconfig/rsyncd
#编辑配置文件
uid = rsync #启动服务的用户id---->控制的是客户端的权限
gid = rsync #启动服务的用户组id
port = 873 #服务默认监听端口
fake super = yes #无需使用root启动
use chroot = no #安全机制
max connections = 200 #最大连接数
timeout = 600 #超时时间
ignore errors #错误忽略
read only = false #只读
list = false #查看模块列表
auth users = rsync_backup #定义虚拟用户
secrets file = /etc/rsync.passwd #定义虚拟用户密码
log file = /var/log/rsyncd.log #日志文件
[backup] #模块
comment = welcome to my backup! #模块的备注
path = /root/backup #服务器真实的路径
#根据配置文件操作
1、创建用户
[root@backup ~]# useradd rsync -s /sbin/nologin -M #不登录,不创建家目录
2、创建密码文件
[root@backup ~]# echo "rsync_backup:123456" > /etc/rsync.passwd #密码是用户名 : 密码格式
rsync_backup:123456
chmod 600 /etc/rsync.passwd #切记要授权!!!!!
3、创建备份目录
[root@backup ~]# mkdir backup #创建文件夹
[root@backup ~]# chown -R rsync.rsync /backup/ #授权目录
#启动服务
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# rsync --daemon
#验证启动
[root@backup ~]# netstat -lntp | grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 1707/rsync
tcp6 0 0 :::873 :::* LISTEN 1707/rsync
[root@backup ~]# ps -ef | grep rsync
root 1707 1 0 21:21 ? 00:00:00 /usr/bin/rsync --daemon --no-detach
root 1714 1619 0 21:23 pts/0 00:00:00 grep --color=auto rsync
配置文件
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
[backup]
comment = welcome to my backup!
path = /root/backup
客户端推拉操作
#push推送语法
[root@web1 ~]# rsync -avz gaiwangka.sh rsync_backup@192.168.15.101::backup
#双冒号后面跟的是模块名,配置文件中模块的路径为存储路径
Password:
sending incremental file list
gaiwangka.sh
sent 206 bytes received 43 bytes 71.14 bytes/sec
total size is 194 speedup is 0.78
#pull拉取语法
[root@web1 ~]# rsync -avz rsync_backup@192.168.15.101::backup ./1/
Password:
receiving incremental file list./
gaiwangka.sh
sent 50 bytes received 253 bytes 67.33 bytes/sec
total size is 194 speedup is 0.64
客户端推拉数据方法
方式一:输入密码
繁琐
方式二:指定密码文件
#创建密码文件
[root@web1 1]# echo "***" > /etc/rsync.passwd #这里的文件是纯密码,不需要用户
[root@web1 1]# chmod 600 /etc/rsync.passwd
#要授权!!
方式三:临时环境变量
export RSYNC_PASSWORD=*****
#想要永久生效写到环境变量里
vim /etc/profile.d/HJBL.sh
#小细节:这里写环境变量的时候,尽量将环境变量给写到/etc/profile.d/*.sh中,从而降低出错风险
#补充
#防火墙设置
[root@backup backup]# firewall-cmd --add-port=873/tcp
[root@backup backup]# firewall-cmd --list-all
权限问题的强调
#1、服务端进程的用户身份,与当前登录的用户有关(密码文件有关)
以什么用户提交的命令,该进程的身份就是该用户
即当前登录的用户是谁,进程的用户身份就是谁
#2、配置文件中的uid与gid是为了控制客户端的权限
#补充
#防火墙设置
[root@backup backup]# firewall-cmd --add-port=873/tcp
[root@backup backup]# firewall-cmd --list-all
常见报错
#chdir error
代表文件夹不存在,检查配置文件中的模块的path路径
或者你没有创建文件夹