rsync扩展 :
通过后台服务的方式:

在远程主机上建立一个rsync服务器,将本机作为rsync的客户端。(通常的表现方式为在后面添加 :: )

rsync 通过服务的方式同步:

要编辑配置文件/etc/rsyncd.conf 启动服务rsync --daemon 格式:rsync -av test1/ 192.168.133.130::module/dir/

(1.)编辑配置文件-- # vim /etc/rsyncd.conf 由于centos 7 默认对配置文件全部都是注释掉的,最简单的方式我们在最后另起一行;输入咱们的策略进行编辑:

rsyncd.conf样例:
port=873
log file=/var/log/rsync.log
pid file=/var/run/rsyncd.pid
address=192.168.133.130
[test]
path=/tmp/rsync
use chroot=true
max connections=4
read only=no
list=true
uid=root
gid=root
auth users=test
secrets file=/etc/rsyncd.passwd
hosts allow=192.168.133.132 1.1.1.1 2.2.2.2  192.168.133.0/24

# cat /var/log/rsync.log //查看日志
# mkdir /tmp/rsync //创建一个目录匹配咱们创建的[test]模块名
# chmod 777 /tmp/rysnc //为了测试方便,暂时先给777,工作当中咱们需要看具体的情况。
# rsync --daemon //然后我们启动一下服务
# ps aux | grep rsync //检查一下是否有此服务
# netstat -lntp //检查服务是否启动 -t:列出 TCP 协议的连接
[root@zhdy-02 ~]# rsync -avP /tmp/asd.ipt 192.168.159.129::test/asdbak.ipt rsync: failed to connect to 192.168.159.129 (192.168.159.129): No route to host (113) rsync error: error in socket IO (code 10) at clientserver.c(122) [sender=3.0.9]

当我们测试时,发现了如上错误↑

  • 首先我们先检查网络是否可以ping通。
  • telnet一下服务器的IP地址

我们发现网络是通的,但是没有路由↓

[root@zhdy-02 ~]# telnet 192.168.159.129 873
Trying 192.168.159.129...
telnet: connect to address 192.168.159.129: No route to host

其原因就是因为firewall阻挡了我们。两端都需停掉firewall服务:(# systemctl stop firewalld)


rsyncd.conf配置文件详解 :

port:指定在哪个端口启动rsyncd服务,默认是873端口。

# vim /etc/rsyncd.conf 把端口更改为8730,
# killall rsync //杀死所有rsync相关的服务
# ps aux | grep rsync
# netstat -lntp //查看端口已经改成8730

然后我们需要添加 --port 8730

[root@zhdy-02 ~]# rsync -avPL --port 8730 192.168.159.129::test/ /tmp/test/
receiving incremental file list
symlink has no referent: "/123.txt" (in test)
./

sent 29 bytes  received 131 bytes  320.00 bytes/sec
total size is 4868  speedup is 30.43
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1518) [generator=3.0.9]

log file:指定日志文件。

pid file:指定pid文件,这个文件的作用涉及服务的启动、停止等进程管理操作。

address:指定启动rsyncd服务的IP。假如你的机器有多个IP,就可以指定由其中一个启动rsyncd服务,如果不指定该参数,默认是在全部IP上启动。

[]:指定模块名,里面内容自定义。


path:指定数据存放的路径。 一旦我们制定了目录,例如我们创建一个超链接/etc/passwd .如果我们在同步的时候 -L就会出现问题!我们可以查看日志,查看具体错误信息!

[root@zhdy-02 ~]# rsync -avPL 192.168.159.129::test/ /tmp/test/
receiving incremental file list
symlink has no referent: "/123.txt" (in test)

sent 26 bytes  received 128 bytes  102.67 bytes/sec
total size is 4868  speedup is 31.61
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1518) [generator=3.0.9]

当我们把下面设置成false,即可解决↓

use chroot true|false:表示在传输文件前首先chroot到path参数所指定的目录下。这样做的原因是实现额外的安全防护,但缺点是需要以roots权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true,如果你的数据当中有软连接文件,建议设置成false。


max connections:指定最大的连接数,默认是0,即没有限制。

read only ture|false:如果为true,则不能上传到该模块指定的路径下。

list:表示当用户查询该服务器上的可用模块时,该模块是否被列出,设定为true则列出,false则隐藏。

列出远程服务端的list:
[root@zhdy-02 ~]# rsync --port 8730 192.168.159.129::
test

如果改成false,我们就不可以查看服务器中的list。(安全选项,如果可见的,没有限制IP,黑客就可以直接列出来,然后在你模块里面写数据,导入木马等)


uid/gid:指定传输文件时以哪个用户/组的身份传输。

如果把uid=nobody;gid=nobody;我们则会没有任何权限去上传和下载:

[root@zhdy-02 ~]# rsync -avPL --port 8730 /tmp/test/ 192.168.159.129::test/ 
sending incremental file list
123.txt
        1296 100%    0.00kB/s    0:00:00 (xfer#1, to-check=1/3)

sent 1400 bytes  received 27 bytes  2854.00 bytes/sec
total size is 6164  speedup is 4.32
[root@zhdy-02 ~]# rsync -avP --port 8730 /tmp/test/ 192.168.159.129::test/ 
sending incremental file list
./
rsync: failed to set times on "/." (in test): Operation not permitted (1)

auth users:指定传输时要使用的用户名。

# vim /etc/rsyncd.passwd 写入 test:asd9577 用户名+密码
# chmod /etc/rsyncd.passwd

如下↓:

[root@zhdy-02 ~]# rsync -avP --port 8730 /tmp/test/ test@192.168.159.129::test/ 
Password: 
sending incremental file list
./

sent 83 bytes  received 14 bytes  27.71 bytes/sec
total size is 4879  speedup is 50.30

secrets file:指定密码文件,该参数连同上面的参数如果不指定,则不使用密码验证。注意该密码文件的权限一定要是600。格式:用户名:密码

有时候我们同步一些文件几乎都是使用脚本在凌晨完成的动作,如果需要我们输入密码肯定不行的,所以我们需要在客户端也要创建一个密码文件与之匹配!

# vim /etc/rsync_pass.txt 只需要增加密码即可 ASD9577
# chmod 600 /etc/rsync_pass.txt

这样就算不输入密码也是可以的!!

[root@zhdy-02 ~]# rsync -avP --port 8730 /tmp/test/ --password-file=/etc/rsync_pass.txt test@192.168.159.129::test/ 
sending incremental file list

sent 77 bytes  received 8 bytes  170.00 bytes/sec
total size is 4879  speedup is 57.40

hosts allow:表示被允许连接该模块的主机,可以是IP或者网段,如果是多个,中间用空格隔开。

hosts allow=192.168.159.130  1.1.1.1 2.2.2.2  192.168.159.0/24