rsync安装和使用

文:铁乐与猫 2017-9-27
环境:CentOS7.3、rsync-3.1.2

官网下载对应的安装包。
rsync官网:
https://rsync.samba.org

由于源码包很小,我们也可以直接wget的方式下载。

wget httpss://download.samba.org/pub/rsync/rsync-3.1.2.tar.gz

解压:
tar -zxvf rsync-3.1.2.tar.gz
进入解压后的源码包
cd rsync-3.1.2

1、编译安装
./configure
make && make install

2、开机启动:
把启动命令放入到rc.local文件中。如下:
echo “/usr/local/bin/rsync –daemon –config=/etc/rsyncd.conf” >> /etc/rc.local
也可以写成:
echo “/usr/local/bin/rsync –daemon”>>/etc/rc.local

cat /etc/rc.local查看验证

[root@tielemao ~]# cat /etc/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run ‘chmod +x /etc/rc.d/rc.local’ to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
/usr/share/denyhosts/daemon-control start
/usr/local/bin/rsync –daemon –config=/etc/rsyncd.conf

3、创建配置文件
rsync服务器端需要两个配置文件:rsyncd.conf、rsyncd.password
其中rsyncd.conf默认存放在/etc/目录下,同时它也是rsync服务器的主配置文件。
该文件配置了rsync服务器的控制认证、访问、日志记录等等。而rsyncd.password主要用于存储rsync用户名和密码。
但是在rsync安装完毕后后是不会生成以上这两个配置文件的,需要我们手工进行创建:

vim /etc/rsyncd.conf

uid = root
gid = root
user chroot = no
max connections = 200
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
secrets file=/etc/rsyncd.passwd

#以上是全局主要的配置

[backup]
path = /backup/
ignore errors
read only = no
list = no
auth users = yunwei
secrets file = /etc/rsyncd.password

[www]
path = /www/
ignore errors
read only = no
list = no
auth users = apache
secrets file = /etc/rsyncd.password

#以上是针对同步目录的一些实例配置

rsync默认是在nobody用户下运行的,
但是我们测试为了同步时不为各种权限的事情烦恼,就让其在root用户下运行。

配置文件修改完成后,到创建密码文件:
vim /etc/rsyncd.password
将yunwei和apache的用户和密码编辑进去,例如:
yunwei:ABCabc123
apache:ABCabc123

注:该密码文件中的用户和密码可以进行自定义,同时该用户不一定要在服务器中的系统用户中存在。

密码文件创建完毕后,还需要将其权限设置为600,否则会在以后同步时提示验证出错。
chmod 600 /etc/rsyncd.passwordl

一个rsync配置文件中可以包含多个认证模块(比如上面列表的[backup]),同时一个密码文件中也可以存放多个用户和其对应的密码。

其中每一个认证模块可以对应不同的客户端。
以上两个文件创建完毕后,我们来创建其对应的目录并授权,如下:
mkdir /{backup,www}

测试的时候由于是直接root操作的,就不用再chown root了,生产场景使用中就根据实际情况来赋权吧。不过一般为了保证同步的时候权限也能一致,还是会有直接使用root角色运行rsync的时候。

4、客户端配置

使用另一台centos7系统的服务器充当客户端,这次安装使用yum安装,版本号是3.0.9。
yum install rsync

在客户端同样进行编译或yum安装rsync,安装完毕rsync服务后,是不需要启动rsync服务的。
原因是因为我们在客户端仅需要使用shell模式就可以了,服务端因为要提供URL路径和873端口的daemon模式所以才需要启动服务。
默认安装rsync完成就是可以直接使用shell命令去工作。(可以理解为rsync就是写入了环境变量的一个linux 命令)
我们只需要在客户端创建连接rsync服务器时,验证码用户所需要的密码文件即可。
该密码文件中的密码要与rsync服务器上的密码文件中的密码对应,并且也要与rsync服务器rsyncd.conf配置文件中的认证模块中的用户匹配。

所以同样vim /etc/rsyncd.password创建密码文件,同时将用户密码写进去:
ABCabc123

注:作为客户端,密码认证文件里面直接就是填入密码就可以了。

sudo chmod 600 /etc/rsyncd.password #赋权600权限到密码文件

5、启动rsync服务
服务端rsync服务启动如下:

[root@jira /]# rsync –daemon
[root@jira /]# ps aux | grep rsync #查看启动成功没有
root 30344 0.0 0.0 116688 568 ? Ss 17:42 0:00 rsync –daemon
root 30346 0.0 0.0 114708 976 pts/0 R+ 17:42 0:00 grep –color=auto rsync

另外,如果环境变量中没有添加/usr/local/bin的话,就需要先在/etc/profile配置文件中添加进$PATH中后才方便以后直接敲命令操作,不然的话就得敲全绝对路径去启动服务咯。

rsync –daemon 在启动服务时默认加载/etc/rsyncd.conf文件,假如你自定义了另一个配置文件来使用,那就需要–config接全配置文件路径上去了。例如:

rsync –daemon –config=/rsync/rsyncd.conf

至于关闭rsync服务则是pkill rsync ,因为是编译安装的,
如果是yum安装的倒可以直接使用systemctl stop rsync。

6、rsync同步实例
实验环境:服务器端172.16.0.111
客户端172.16.0.145
测试文件:服务端/www/test_rsync_111,内容”this is server 111 www”。
客户端/www/test_rsync_145,内容”this is client 145 www”。

[root@jira www]# ifconfig eno16777984 | grep “inet” | awk ‘{print $2}’
172.16.0.111
fe80::20c:29ff:fec6:bed7
[root@jira www]# ifconfig eno16777984 | grep “inet” | awk ‘{print $2}’ |cut -d: -f2
172.16.0.111

[root@jira www]# vim /www/test_rsync_111
[root@jira www]# cat /www/test_rsync_111
this is server 111 www

[yunwei@localhost ~]$ ifconfig ens160 | grep “inet”|awk ‘{print $2}’|cut -d: -f2
172.16.0.145

[yunwei@localhost ~]$ sudo mkdir /www
[yunwei@localhost ~]$ sudo vim /www/test_rsync_145
[yunwei@localhost ~]$ cat /www/test_rsync_145
this is client 145 www.

以上,准备完毕。

把客户端145的文件推送到rsync服务器172.16.0.111上,我们需要使用到第三种工作模式:
rsync [OPTION]…SRC [SRC]…[USER@]HOST::DEST
作用就是把本地的文件(src)推送同步到远程服务器上。
其中DEST表示的是rsync服务器的认证模块名。此种方式属于推送方式。

具体使用方法如下:
rsync -avz /www/* apache@172.16.0.111::www –password-file=/etc/rsyncd.password

——————————
附:rsync几个重要参数

经常使用的几个参数:-v,-a,-z
-v, –verbose详细模式输出。
-a, –archive归档模式,表示以递归方式传输文件,并保持所有文件属性不变。
-z, –compress对备份的文件在传输时进行压缩处理。
–delete:删除那些DST中存在而在SRC中没有的文件。
——————————

[yunwei@localhost ~]$ sudo rsync -avz /www/* apache@172.16.0.111::www –password-file=/etc/rsyncd.password
@ERROR: auth failed on module www
rsync error: error starting client-server protocol (code 5) at main.c(1516) [sender=3.0.9]

出现故障了,感觉像是服务端的认证失败。
—————————
关于这个auth失败的问题,有以下可能的情况:

1、密码输入错误:
请再次确认你登录用户的密码无误

2、secrets file格式错误:
secrets file的文件格式是  upload:123456
表示upload用户的rsync密码是123456

3、配置文件写错:
最坑爹的一个,看看自己模块配置下面的auth users、secrets file有没写错,
另外看看会不会存在两个以上相同名字的模块。

4、secrets file权限问题
服务端的secrets file权限必须是600,
可以使用chmod 600 /home/user/test/rsync/etc/test.pass

5、secrets file文件拥有者与rsync运行者
服务端rsync服务是以什么用户运行,则必须保证secrets file文件拥有者必须是同一个
假设root运行rsync –daemon,则secrets file的owner也必须是root

6、如果是以–password-file=file的方式附带密码
确保客户端密码文件格式无误,与服务端的密码文件不同,
客户端的不用加上用户名,即直接是  123456
————————————–
发现自己犯了个错误,客户端的密码认证文件,我并不是直接输密码。

修改rsyncd.password文件,只填密码后重新再试成功了:

[yunwei@localhost ~]$ sudo rsync -avz /www/* apache@172.16.0.111::www –password-file=/etc/rsyncd.password
sending incremental file list
test_rsync_145

sent 98 bytes received 27 bytes 250.00 bytes/sec
total size is 24 speedup is 0.19

到服务端验证也已经存在有客户端推送过来的文件:

[root@jira www]# ls
test_rsync_111 test_rsync_145
[root@jira www]# cat test_rsync_145
this is client 145 www.

反过来,我们把服务器端172.16.0.111的文件拉取到(对客户端而言)客户端172.16.0.145上,用到的命令是:
rsync [OPTION]… [USER@]HOST::SRC [DEST]

同样是在客户端上操作:
sudo rsync -avz apache@172.16.0.111::www –password-file=/etc/rsyncd.password /www/

和推送相比,拉取的话是远端目录在前,本地目录在后。可以理解为copy命令相似。

7、六种工作模式
1)rsync [OPTION]… SRC [SRC]… DEST
2)rsync [OPTION]… SRC [SRC]… [USER@]HOST:DEST
3)rsync [OPTION]… SRC [SRC]… [USER@]HOST::DEST
4)rsync [OPTION]… SRC [SRC]… rsync://[USER@]HOST[:PORT]/DEST
5)rsync [OPTION]… [USER@]HOST:SRC [DEST]
6)rsync [OPTION]… [USER@]HOST::SRC [DEST]
7)rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST]

看起来区别好像复杂,其实只要留意SRC是不是在前,[DEST]是不是在后就可以很容易区分开两种做法,前者在前的是推送到服务端的,后者在后的是拉取服务端文件回来本地的。

1) rsync [OPTION]… SRC [SRC]… DEST
同步本地文件,从一个目录同步到另外一个目录。如:rsync -avz /data /backup,表示把本地/data目录下的文件同步到本地/backup目录下。
这里没有出现远程服务器地址,所以是本地同步,相当于copy命令从一个目录到另一个目录。

2) rsync [OPTION]… SRC [SRC]… [USER@]HOST:DEST
使用一个远程shell程序(如rsh、ssh)来实现把本地的文件同步到远程机器上。此种方式属于推送方式。如:rsync -avz /data test@192.168.199.247:/backup,表示把本地/data目录下的文件同步到服务器192.168.199.247的/backup目录下。
重点是这里的分隔号冒号只有一个,表示用到的方式是ssh。

3) rsync [OPTION]… SRC [SRC]… [USER@]HOST::DEST
把本地的文件同步到远程服务器上,其中DEST表示的是rsync服务器的认证模块名。此种方式属于推送方式。如:rsync -avz /data test@192.168.199.247::backup –password-file=/etc/rsyncd.password,表示把本地/data目录下的文件同步到服务器192.168.199.247的backup模块下path路径下。
双冒号的表示用到了开启dameon方式服务的rsync服务器,与单冒号的有所区别。rsync服务器开启了tcp873,同时有配置文件,有模块去引用。

4) rsync [OPTION]… SRC [SRC]… rsync://[USER@]HOST[:PORT]/DEST
列出远程机器的文件列表。这类似于ls命令,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://test@192.168.199.247/backup,表示在本机列出服务器192.168.199.247的/backup目录下的内容。
这里出现了rsync://url 的方式。

5) rsync [OPTION]… [USER@]HOST:SRC [DEST]
把远程机器的文件同步到本地,此种方式属于拉取方式。如:rsync -avz test@192.168.199.247:/backup /data,表示把192.168.199.247的/backup目录下文件同步到本地/data目录下。
同理,单冒号为ssh之类。

6) rsync [OPTION]… [USER@]HOST::SRC [DEST]
把远程机器的文件同步到本地,此种方式属于拉取方式。如:rsync -avz test@192.168.199.247::backup –password-file=/etc/rsyncd.password /data,表示把192.168.199.247的backup模块path路径下的文件同步到本地/data目录下。
同理,双冒号之分。

7)rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST]
与4相对,没什么区别,4和7合为同一工作模式。

参考:
httpss://www.ilanni.com/?p=8499

发表评论

电子邮件地址不会被公开。 必填项已用*标注

10 + 12 =