rsync 应用实例
1)通过ssh的方式
最上面介绍的5种方式当中,第二、第三(1个冒号)就属于通过ssh的方式,这种方式其实就是让用户去登录到远程机器,然后执行rsync的任务。
这种方式就是前面介绍的第二种方式了,是通过ssh拷贝的数据,是要输入10.0.2.69那台机器root的密码的。
这个则为第三种方式。这两种方式如果写到脚本里,备份起来就有麻烦了,因为要输入密码,脚本本来就是自动的,不可能做到的。但是不代表没有解决办法。那就是通过密钥验证,密钥不设立密码就ok了。还记得在前面笔者曾经介绍过通过密钥登录远程主机吗,下面要讲的内容就是那些东西了。
先提前说一下基本的主机信息: 10.0.2.68 (主机名Aming-1)和10.0.2.69(主机名Aming)需要从Aming-1上拷贝数据到Aming上。
A. 首先确认一下Aming-1上是否有这个文件 /root/.ssh/id_rsa.pub
如果没有安装以下的方法生成:
在这个过程中会有一些交互的过程,因为笔者的/root/.ssh/id_rsa已经存在,所以会问是否覆盖,笔者选择覆盖,然后会提示要输入这个密钥的密码,出于安全考虑应该定义个密码,但是我们的目的就是为了自动化同步数据,所以这里不输入任何密码,直接按回车,即密码为空。最后则生成了私钥(/root/.ssh/id_rsa)和公钥文件(/root/.ssh/id_rsa.pub)
B. 把公钥文件的内容拷贝到目标机器上
复制主机Aming-1的/root/.ssh/id_rsa.pub文件内容,并粘贴到主机Aming的/root/.ssh/authorized_keys中
在这一步也许你会遇到/root/.ssh目录不存在的问题,可以手动创建,并修改目录权限为700也可以执行ssh-keygen命令生成这个目录。保存/root/.ssh/authorized_keys文件后,再到主机Aming-1上执行
你会发现,现在不用输入密码也可以登录主机Aming了。下面再从主机Aming-1上执行一下rsync命令试试吧。
2)通过后台服务的方式
这种方式可以理解成这样,在远程主机上建立一个rsync的服务器,在服务器上配置好rsync的各种应用,然后本机作为rsync的一个客户端去连接远程的rsync服务器。下面笔者就介绍一下,如何去配置一台rsync服务器。
A. 建立并配置rsync的配置文件 /etc/rsyncd.conf
其中配置文件分为两部分全部配置部分和模块配置部分,全局部分就是几个参数而已,就像笔者的rsyncd.conf中port, log file, pid file, address这些都属于全局配置,而[test] 以下部分就是模块配置部分了。一个配置文件中可以有多个模块,模块名自定义,格式就像笔者的rsyncd.conf中的这样。其实模块中的一些参数例如use chroot, max connections, udi, gid, auth users, secrets file以及hosts allow都可以配置成全局的参数。当然笔者给出的参数并不是所有的,你可以通过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
:指定密码文件,该参数连同上面的参数如果不指定则不使用密码验证
hosts allow :指定被允许连接该模块的主机,可以是IP或者网段,如果是多个,之间用空格隔开
B. 编辑secrets file,保存后要赋予600权限
C. 启动rsyncd服务
启动后查看日志,看看是否有错误信息,然后再看下端口是否启动。
如果想开机启动,请把”rsync –daemon –confg=/etc/rsyncd.conf” 写入到/etc/rc.d/rc.local文件。
D. 到另一台机器上测试
记得那个use chroot参数吗,如果设置为true,则/root/test4/1.sh不会被拷贝过来。
修改rsyncd.conf文件,把use chroot改成true,不用重启服务即可生效。
从上例中的详细信息中也可以看到,不能拷贝软连接的。所以请记住,如果涉及到软连接,请设置use chroot=false 。另外这种方式也是可以不用手动输入密码的,两种实现方式。
第一种:指定密码文件
先编辑一个密码文件,并修改600权限。
在同步时,指定密码文件即可(--password-file=/etc/rsyncd.passwd)
第二种:在rsync服务器端不指定用户
把相关的参数都用’#’注释掉。然后再到客户端上测试。
注意,这里不用再加test@这个用户了,默认是以root的身份拷贝的,现在已经不需要输入密码了。
最上面介绍的5种方式当中,第二、第三(1个冒号)就属于通过ssh的方式,这种方式其实就是让用户去登录到远程机器,然后执行rsync的任务。
这种方式就是前面介绍的第二种方式了,是通过ssh拷贝的数据,是要输入10.0.2.69那台机器root的密码的。
这个则为第三种方式。这两种方式如果写到脚本里,备份起来就有麻烦了,因为要输入密码,脚本本来就是自动的,不可能做到的。但是不代表没有解决办法。那就是通过密钥验证,密钥不设立密码就ok了。还记得在前面笔者曾经介绍过通过密钥登录远程主机吗,下面要讲的内容就是那些东西了。
先提前说一下基本的主机信息: 10.0.2.68 (主机名Aming-1)和10.0.2.69(主机名Aming)需要从Aming-1上拷贝数据到Aming上。
A. 首先确认一下Aming-1上是否有这个文件 /root/.ssh/id_rsa.pub
如果没有安装以下的方法生成:
在这个过程中会有一些交互的过程,因为笔者的/root/.ssh/id_rsa已经存在,所以会问是否覆盖,笔者选择覆盖,然后会提示要输入这个密钥的密码,出于安全考虑应该定义个密码,但是我们的目的就是为了自动化同步数据,所以这里不输入任何密码,直接按回车,即密码为空。最后则生成了私钥(/root/.ssh/id_rsa)和公钥文件(/root/.ssh/id_rsa.pub)
B. 把公钥文件的内容拷贝到目标机器上
复制主机Aming-1的/root/.ssh/id_rsa.pub文件内容,并粘贴到主机Aming的/root/.ssh/authorized_keys中
在这一步也许你会遇到/root/.ssh目录不存在的问题,可以手动创建,并修改目录权限为700也可以执行ssh-keygen命令生成这个目录。保存/root/.ssh/authorized_keys文件后,再到主机Aming-1上执行
你会发现,现在不用输入密码也可以登录主机Aming了。下面再从主机Aming-1上执行一下rsync命令试试吧。
2)通过后台服务的方式
这种方式可以理解成这样,在远程主机上建立一个rsync的服务器,在服务器上配置好rsync的各种应用,然后本机作为rsync的一个客户端去连接远程的rsync服务器。下面笔者就介绍一下,如何去配置一台rsync服务器。
A. 建立并配置rsync的配置文件 /etc/rsyncd.conf
其中配置文件分为两部分全部配置部分和模块配置部分,全局部分就是几个参数而已,就像笔者的rsyncd.conf中port, log file, pid file, address这些都属于全局配置,而[test] 以下部分就是模块配置部分了。一个配置文件中可以有多个模块,模块名自定义,格式就像笔者的rsyncd.conf中的这样。其实模块中的一些参数例如use chroot, max connections, udi, gid, auth users, secrets file以及hosts allow都可以配置成全局的参数。当然笔者给出的参数并不是所有的,你可以通过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
:指定密码文件,该参数连同上面的参数如果不指定则不使用密码验证
hosts allow :指定被允许连接该模块的主机,可以是IP或者网段,如果是多个,之间用空格隔开
B. 编辑secrets file,保存后要赋予600权限
C. 启动rsyncd服务
启动后查看日志,看看是否有错误信息,然后再看下端口是否启动。
如果想开机启动,请把”rsync –daemon –confg=/etc/rsyncd.conf” 写入到/etc/rc.d/rc.local文件。
D. 到另一台机器上测试
记得那个use chroot参数吗,如果设置为true,则/root/test4/1.sh不会被拷贝过来。
修改rsyncd.conf文件,把use chroot改成true,不用重启服务即可生效。
从上例中的详细信息中也可以看到,不能拷贝软连接的。所以请记住,如果涉及到软连接,请设置use chroot=false 。另外这种方式也是可以不用手动输入密码的,两种实现方式。
第一种:指定密码文件
先编辑一个密码文件,并修改600权限。
在同步时,指定密码文件即可(--password-file=/etc/rsyncd.passwd)
第二种:在rsync服务器端不指定用户
把相关的参数都用’#’注释掉。然后再到客户端上测试。
注意,这里不用再加test@这个用户了,默认是以root的身份拷贝的,现在已经不需要输入密码了。
none