rsync介绍,传输方式(ssh和指定rsync用户)以及和scp对比

简介:
rsync 是一种快速且非常通用的文件复制工具。它可以在本地复制,通过ssh复制或拉取远程资源,或通过指定rsync用户复制资源到远程主机或通过rsync守护进程从远程主机拉取资源。它提供了大量选项来控制其行为的各个方面,并允许非常灵活地指定要复制的文件集。
rsync 使用“快速检查”算法(默认情况下)查找需要传输的文件,该算法会查找大小或最后修改时间有改变的文件,属于增量传输。

scp 在网络上的主机之间复制文件。它使用 ssh(1) 进行数据传输,并使用相同的身份验证并提供相同的安全性SSH(1)。 如果身份验证需要,scp 将要求输入密码或密码短语。

rsync与scp区别:
scp相当于主机之间的复制、粘贴和覆盖,比较耗时;
rsync相当于复制,大小或最后修改时间没改变的文件不会被复制,提高传输效率;

传输方式:

Local: 本机复制;
Access via remote shell:通过ssh复制或拉取,一般分为口令(密码)或公钥(无密码)传输方式;
Access via rsync daemon:指定rsync账号/密码复制或拉取。注意与ssh格式区别,相同命令样式下:与::符号异同;

选项介绍:

准备两台主机,确认是否安装rsync:

#检查是否安装rsync
rpm -qa | grep rsync

#若没有则安装
yum -y install rsync

#启动rsync服务
systemctl start rsyncd.service
systemctl enable rsyncd.service

#检查是否已经成功启动
netstat -lnp|grep 873

复制方式介绍:

1.本机复制:

把/home/data/下所有目录和文件复制到/home/data1/
rsync -avz /home/data/* /home/data1/

把/home/data这个目录及下的目录和文件复制到/home/data1/
rsync -avz /home/data /home/data1/

2.通过ssh公钥复制(推荐使用):

这种方式其实是使用ssh协议复制或者拉取资源,ssh常用一般有两种方式,分别为口令(密码)和公钥(无密)。

1)口令方式,第一次请求远程主机时,远程主机会询问源机是否接受公钥,接受后输入密码即可传输。公钥的询问只在第一次成功连接之前,但是密码需要每次都输入,在自动化脚本中会带来一些不便。

2)公钥方式,源机通过ssh-keygen命令生产公钥和私钥(会有一些交互,一直回车即可),默认在~/.ssh/目录下:

把id_rsa.pub通过ftp、scp或rzsz等方式拷贝到远程主机的~/.ssh/目录(~要对应ssh通信时使用的用户主目录,可以使用whoami命令查看下当前用户)下,如果没有此目录也可以执行下ssh-keygen生成(注意和源机传送来的id_rsa.pub同名)或者直接mkdir创建,然后通过cat id_rsa.pub >> authorized_keys命令把源机的公钥加到远程主机上。后续只要是通过ssh通信,都不需要口令(密码)验证了。

复制命令格式实例:

以源主机下这些资源作为实例演示:

# -avz 选项介绍处自行查看
# -e "ssh -p 22",是指定远程主机的ssh端口,默认是22情况下不用指定,这里是举例说明而已
# --exclude,过滤不需要复制的文件或目录,支持多个
# ./ 是指本机目录
# root@192.168.1.13:/home/rsyncDir/ 连接远程主机的用户名和ip,以及目标路径
rsync -avz -e "ssh -p 22" --exclude="*.txt" --exclude="d1"  ./ root@192.168.1.13:/home/rsyncDir/


#--delete 删除desc中src没有的文件或目录
rsync -avz --delete  ./ root@192.168.1.13:/home/rsyncDir/


#从远程主机拉取资源到本地当前目录下
rsync -avz root@192.168.1.13:/home/rsyncDir/ ./

注意:

src目录后加/和不加/的区别,前者是目录下的资源,后者是当前目录及子目录和文件

3.指定rsync用户复制:

1)两台主机都更改配置/etc/rsyncd.conf。在配置文件后面追加下面配置:

uid = root
# //设置运行rsync 进程的用户
gid = root
use chroot = no
max connections = 4
# pid file = /var/run/rsyncd.pid
#//CentOS7中yum安装不需指定pid file 否则报错
lock file=/var/run/rsyncd.lock
log file = /var/log/rsyncd.log
# //此文件定义完成后系统会自动创建
exclude = lost+found/
transfer logging = yes
timeout = 900
ignore nonreadable = yes
# //同步时跳过没有权限的目录
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
#  //传输时不压缩的文件

效果如下:

都重启下:

systemctl restart rsyncd.service

2)设定同步规则:

先在两台主机都创建同步目录/root/rsyncDir

确定好服务端机器,服务端配置/etc/rsyncd.conf后面增加规则(注意的是,pull和push只能开启其中一种操作)

[rsyncDir]
#同步的路径
path=/root/rsyncDir
#规则描述
comment=测试规则
ignore errors
#是否可以pull
read only=no
#是否可以push
write only=yes
list=no
#下面配置同步时候的身份,注意该身份是在rsync里面定义的,并非是本机实际用户。等下说说如何在rsync里面定义身份。
#客户端获取文件的身份此用户并不是本机中确实存在的用户
auth users=rsyncuser
#//用来认证客户端的秘钥文件 格式 USERNAME:PASSWD 此文件权     
#//限一定需要改为600,且属主必须与运行rsync的用户一致。  
secrets file=/etc/rsyncd.passwd
#允许所有主机访问
hosts allow=*

效果如下:

3)继续服务端密码配置(注意用户名要和/etc/rsyncd.conf中规则配置下的auth users对应):

//文件用户名和路径为上面定义,别写错,密码自己定
echo 'rsyncuser:123456'>/etc/rsyncd.passwd

//修改权限
chmod 600 /etc/rsyncd.passwd

再次重启:

systemctl restart rsyncd.service

4)客户端设置登录密码:

//注意这里只需要服务器rsyncd.passwd 中的密码
echo '123456' >>/etc/rsyncd-test.passwd

chmod 600 /etc/rsyncd-test.passwd

5)在客户端机器中输入命令(XXX.XXX.XXX.XXX是服务端机器的ip);

a)开启push时(write only=yes),推送文件/目录到服务端:

#把客户端下rsyncDir目录及其下所有文件和子目录推送到服务端
rsync -auv --password-file=/etc/rsyncd-test.passwd /root/rsyncDir rsyncuser@XXX.XXX.XXX.XXX::rsyncDir

#把客户端下rsyncDir下所有文件和子目录推送到服务端
rsync -auv --password-file=/etc/rsyncd-test.passwd /root/rsyncDir/* rsyncuser@XXX.XXX.XXX.XXX::rsyncDir

b)开启pull时(read only=yes),从服务端拉去文件/目录:

rsync -auv --password-file=/etc/rsyncd-test.passwd  rsyncuser@XXX.XXX.XXX.XXX::rsyncDir /root/rsyncDir

PS:

1)报错可查看日志:/var/log/rsyncd.log

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值