邱立祥

——— 一个刚刚起步的 Linuxer

Cononico

2018年1月5日

Linux基础>

rsync应用实例

一. 通过ssh的方式

前面介绍的rsync 5种方式当中,第二、第三(1个冒号)就属于通过ssh的方式,这种方式其实就是让用户去登录到远程机器,然后执行rsync的任务。

这种方式就是前面介绍的第二种方式了,是通过ssh拷贝的数据,需要输入 192.168.0.101 那台机器 www 账户的密码。当然也可以使用第三种方式拷贝:

以上两种方式如果写到脚本里,备份起来就有麻烦了,因为要输入密码,脚本本来就是自动的,不可能做到的。但是不代表没有解决办法。
那就是通过密钥验证,密钥不设立密码就ok了。
在操作之前我们先讲明主机信息:

192.168.0.10 (主机名Qiu-1)和 192.168.0.101 (主机名Qiu)需要从Qiu-1上拷贝数据到Qiu上。

首先确认一下Qiu-1上是否有这个文件 /root/.ssh/id_rsa.pub:

如果你的Linux不存在这个文件,请按照如下方法生成:

在这个过程中会有一些交互的过程,它首先提示要输入这个密钥的密码,出于安全考虑应该定义个密码,但是我们的目的就是为了自动化同步数据。
所以这里不输入任何密码,直接按回车,即密码为空。最后则生成了私钥(/root/.ssh/id_rsa)和公钥文件(/root/.ssh/id_rsa.pub)
把公钥文件的内容拷贝到目标机器上:

复制主机Qiu-1的/root/.ssh/id_rsa.pub文件内容,并粘贴到主机Qiu的/home/www/.ssh/authorized_keys中:

在这一步也许你会遇到/home/www/.ssh目录不存在的问题,可以手动创建,并修改目录权限为700也可以执行ssh-keygen命令生成这个目录。

保存/home/www/.ssh/authorized_keys文件后,再到主机Qiu-1上执行:

现在不用输入密码也可以登录主机Qiu了。下面先从Qiu主机退出来,再从主机Qiu-1上执行一下rsync命令试试吧。

二. 通过后台服务的方式

这种方式可以理解成这样,在远程主机上建立一个rsync的服务器,在服务器上配置好rsync的各种应用,然后本机作为rsync的一个客户端去连接远程的rsync服务器。下面阿铭就介绍一下,如何去配置一台rsync服务器。

建立并配置rsync的配置文件 /etc/rsyncd.conf

其中配置文件分为两部分:全部配置部分和模块配置部分,全局部分就是几个参数而已,port, log file, pid file, address这些都属于全局配置,而[test]以下部分就是模块配置部分了。

一个配置文件中可以有多个模块,模块名自定义,格式就像 rsyncd.conf 中的这样。其实模块中的一些参数例如use chroot, max connections, udi, gid, auth users, secrets file以及hosts allow都可以配置成全局的参数。

当然上述 rsync.conf 给出的参数并不是所有的,可以通过 man rsyncd.conf  获得更多信息。下面就简单解释一下这些参数的意义:

port指定在哪个端口启动rsyncd服务,默认是873
log file 指定日志文件
pid file指定pid文件,这个文件的作用涉及到服务的启动以及停止等进程管理操作
address指定启动rsyncd服务的IP,假如你的机器有多个IP,就可以指定其中一个启动rsyncd服务,默认是在全部IP上启动
[test]指定模块名,自定义
path指定数据存放的路径
use chroot (true|false)默认是true,意思是在传输文件以前首先chroot到path参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要以roots权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true,如果你的数据当中有软连接文件的话建议设置成false。
max connections指定最大的连接数,默认是0即没有限制
read only (ture|false)如果为true则不能上传到该模块指定的路径下
list 指定当用户查询该服务器上的可用模块时,该模块是否被列出,设定为true则列出,false则隐藏
uid/gid 指定传输文件时,以哪个用户/组的身份传输
auth users指定传输时要使用的用户名
secrets file指定密码文件,该参数连同上面的参数如果不指定则不使用密码验证,注意该密码文件的权限一定要是600
hosts allow 指定被允许连接该模块的主机,可以是IP或者网段,如果是多个,之间用空格隔开

编辑secrets file,保存后要赋予600权限,如果权限不对,不能完成同步

启动后,可以查看一下日志,并查看端口是否启动:

如果想开机启动,请把 rsync –daemon –confg=/etc/rsyncd.conf  写入到 /etc/rc.d/rc.local 文件。
到另一台机器上测试

刚提到有一个选项叫做 “use chroot” 默认为true,如果是true,同步的文件中如果有软链接,则会有问题,首先在主机 Qiu-1 的/root/rsync/test1/ 目录下创建一个软链接文件:

然后再到主机Qiu上,同步:

可以看到,如果设置 “use chroot” 为true则同步软连接文件会有问题,下面阿铭把主机Qiu-1的rsync配置文件修改一下,把true改为false:

然后再到主机Qiu上再次执行同步:

由于 rsync 的特定机制,配置文件时即时生效的,不用重启服务。
上面的例子中,都有输入密码,这样同样也不能写入脚本中自动执行,其实这种方式也是可以不用手动输入密码的,它有两种实现方式。

第一种,指定密码文件

在客户端上,也就是主机Qiu上,编辑一个密码文件:

加入test用户的密码:

修改密码文件的权限:

在同步的时候,指定一下密码文件,就可以省去输入密码的步骤了:

第二种:在rsync服务器端不指定用户

在服务端也就是主机Qiu-1上修改配置文件rsyncd.conf, 去掉关于认证账户的配置项(auth user 和 secrets file这两行):

上面的这个命令是把 “auth users” 和 “secrets file” 两行的最前面加一个 “#”, 这样就把这两行注释掉,使其失去意义。
在前面也未曾讲过sed的这种用法,其实也不难弄明白,只是用分号把两个替换的子命令块给替换了而已。然后我们再到客户端主机Qiu上测试:

注意,这里不用再加test这个用户了,默认是以root的身份拷贝的,现在已经不需要输入密码了。

 

 

来一发吐槽