Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1284889
  • 博文数量: 161
  • 博客积分: 10192
  • 博客等级: 上将
  • 技术积分: 2165
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-27 17:09
文章分类

全部博文(161)

文章存档

2012年(2)

2011年(13)

2010年(137)

2009年(5)

2008年(4)

我的朋友

分类: LINUX

2010-07-21 14:16:56

一.教程:

1.从原始网站下载:

2.[root@localhost bin]#./configure

[root@localhost bin]#make

[root@localhost bin]#make install

说明一点,客户机和服务器都要安装rsync。客户机以客户端方式运行rsync,服务器端 以服务器方式运行rsync,它监听873端口。

3.运行rsync

/usr/local/bin/rsync --daemon

验证启动是否成功:

netstat -na|grep 873

4.配置rsync

简单配置:编辑/etc/rsyncd.conf文件如下:

#全局配置部分

motd file = /etc/rsyncd.motd 欢迎信息文件名称和存放位置(此文件没有,可以自行添加)

read only = yes

list = yes

uid = root

gid = root

#hosts allow = 10.4.5.213

#hosts deny = 10.4.5.0/24

use chroot = no

max connections = 5

log file = /var/log/rsyncd.log

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

#模块配置部分

[paolo]

comment = Paolo 's directory

path = /home/test/software

auth users = rsync,username2,username3

secrets file = /etc/rsyncd.secrets  认证用户名和密码文件的名称和位置
    hosts allow x.x.x.x,y.y.y.y

5.生成验证证文件

echo "rsync:rsync_password" >> /etc/rsyncd.secrets

chmod 600 /etc/rsyncd.secrets

6.客户端

vi /aa/bb/rsyncd.secrets

passwd


rsync -vzrtopg --delete --progress  --password-file=/aa/bb/rsyncd.secretsrsync@10.4.5.161::paolo /china/


上面的命令把10.4.5.161服务器上的paolo模块中的目录的文件传送到本机 /china目录中,并删除本机/china目录中在161服务器paolo模块指定目录中没有的文件。以使两台计算机的目录文件同步。

 
二.CU教程
 
----------------------------------------------
三:
应用说明

正如很多人知道的那样,Rsync可是开源同步软件中的老大哥。很多人(当然也包括我自己)都在使用 它来进行同步、备份工作。它的功能强大,应用灵活,就不多说了。如果对Rsync前世今生很感兴趣,那么一会看看简介,然后到他们官方网站好好看看。

虽然Rsync很强大,但是它并没有直接支持加密传输。也就是说,它是直接明文传输的,对于一些安全 要求高的数据,那就不太保险了。不信?你可以用抓包工具试试看。

如果要传输保密文件,那怎么办?放心,Rsync提供了ssh通道功能。也就是通过ssh安全通道来 传输,传输过程中,数据是经过ssh加密的。不信?你还是可以抓包看看。

这就是我们要进行的工作了,配置一个具有ssh安全通道的,安全级别高的同步体系。

[] 加密传输

我们利用SSH来达到安全通道的目的。SSH 的 RSA 和 DSA 认证协议的基础是一对专门生成的密钥,分别叫做 专用密钥和 公用密钥(简称 私钥和公钥,下面我们都使用简称)。使用这些基于密钥的认证系统的优势在于:在许多情况下,有可能不必手工输入密码就能建立起安全的连接。

尽管基于密钥的认证协议相当安全,但是如果不注意保护,把私钥泄露了,那么别人也就可以登录到有公钥 的服务器。那就很不安全了。

因此居于安全考虑,我们进行的同步配置,是居于普通用户来进行备份的。

[] 同步方向

在这里采用的,不是常见的C/S模式,即源服务器运行rsync --daemon模式,备份服务器主动同步。而是采用SSH通道模式,不需要配置rsync --daemon。从源服务器直接同步到备份服务器。

[] 环境说明

我配置的是A、B 两台主机,A主机做为源服务器,B主机作为客户端。

[] 硬件环境

两台服务器的配置一样,硬件配置如下:

单志强2.4G CPU
2G 内存
36G SCSI硬盘
1G inter网卡
[] 网络环境

两台服务器在同一个机房,但是不同网段。IP地址分别设置如下:

A服务器的IP地址:
192.168.8.8
B服务器的IP地址:
192.168.11.11


[] 系统环境

操作系统:

A、B两台服务器均安装了FreeBSD 6.2-RELEASE-p2(通过make world升级到最新)。

SSH是系统自带的版本:

# ssh -V
OpenSSH_4.5p1 FreeBSD-20061110, OpenSSL 0.9.7e-p1 25 Oct 2004
[] 软件简介

由于我们是在unix/linux下使用SSH和RSYNC,因此仅仅介绍SSH和RSYNC,而不 介绍系统以及其他软件。

[] SSH的简介

SSH是英文Secure Shell的简写形式。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺 骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为 FTP、Pop、甚至为PPP提供一个安全的"通道"。

最初的SSH是由芬兰的一家公司开发的。但是因为受版权和加密算法的限制,现在很多人都转而使用 OpenSSH。OpenSSH是SSH的替代软件包,而且是免费的,可以预计将来会有越来越多的人使用它而不是SSH。目前所发行的开源 UNIX/Linux,默认都会带有OpenSSH(一些可能需要你额外的安装一下)。

如果你喜欢的话,也可以安装SSH,他虽然有限制,但是对于非商业用户,是可以免费使用的。

相关链接如下:

http://ssh.com/products/ssh_secure_shell/
[] RSYNC的简介

在RSYNC的官方网站上,对于RSYNC的介绍非常简单。

rsync 是一个开放源码的快速的文件同步工具,是在GUN的GPL2协议下发布的。
所以任何人都可以免费的使用设置修改和再发行它。rsync的作者是 Wayne Davison。
相关链接如下:

[] 软件安装 [] SSH的安装

由于系统会自带有SSH,我们就直接使用系统自带的SSH,而不再单独安装。

我会另外写一个SSH安装配置的专题文章。

[] RSYNC的安装

我是在FreeBSD上进行的安装配置,因此同时给出利用FreeBSD的ports安装和手工安装 两种方式。其中手工安装方式,也可以在Linux下进行。

[] ports方式安装

在开始ports安装之前,先做一次ports更新。这样做的目的是让ports保持最新,并且让通 过ports安装的软件是最新的。

用CVSUP更新:
# cvsup -L2 -g /opt/etc/ports-supfile
你需要根据自己的ports-supfile文件路径来指定。

进入rsync的ports目录:

# cd /usr/ports/net/rsync/

查看软件版本信息:

# cat distinfo
MD5 (rsync-2.6.9.tar.gz) = 996d8d8831dbca17910094e56dcb5942
SHA256 (rsync-2.6.9.tar.gz) = ca437301becd890e73300bc69a39189ff1564baa761948ff149b3dd7bde633f9
SIZE (rsync-2.6.9.tar.gz) = 811841

由此我们可以得知rsync的版本是 2.6.9,也就是目前最新的发行版本。

选择配置:

# make config
[ ] POPT_PORT Use popt from devel/popt instead of bundled one
[X] TIMELIMIT Time limit patch
[X] FLAGSP File system flags support patch, adds --flags
[ ] ACLSP ACL support patch, adds --acls
[X] SSH Use SSH instead of RSH

在出现选项界面里,通过移动上下键和空格键,选择SSH,也就是用SSH替换RSH。其他的默认就可 以了。

完成安装:

# make install clean

很简单吧?使用ports的好处就是,安装太方便了。只要执行 make install 它会自动下载,编译,安装。clean 是告诉ports,安装完后,清楚源码文件和其他过程文件。

[] 手工安装

*下载安装包

下载页面:


具体下载链接:


*解压和配置

# tar -zxvf rsync-2.6.9.tar.gz
# cd rsync-2.6.9
# ./configure --disable-debug --with-rsh=ssh
说明:
由于 --with-rsh=默认就是ssh,所以也可以不显式指定这个配置项;
还可以通过 --prefix=/path 来指定安装目录,默认则安装到/usr/local/bin目录;
关闭调试模式 --disable-debug;
也可以通过 ./configure --help 查看更多选项,再根据自己的需要来设定。

*编译和安装

# make
# make install

至此,没有出现什么错误的话,整个手工安装过程就完毕了。

[] ssh的配置

在这里的配置,当然不是指如何配置SSH服务啦。而是指配置用来SSH登录相关的帐户的公钥、私钥。

注意: 备份服务器必须运行sshd服务。
[] 创建帐户

在A、B两台服务器上各创建一个普通帐户,不需要设置密码。

在FreeBSD下创建帐户:

# pw user add -d /home/mybackup -n mybackup

在Linux下创建帐户:

# useradd -d /home/mybackup mybackup
[] 生成公钥和私钥

这些操作是在同步源服务器,就是有需要做备份数据的服务器。这里是指A主机。

首先,切换到mybackup帐户以及该帐户的用户目录下:

# su mybackup
$ cd ~
$ pwd
/home/mybackup
$ mkdir .ssh
$ cd .ssh
$ pwd
/usr/home/mybackup/.ssh


生成公钥、私钥:

$ ssh-keygen -t dsa -b 1024
Generating public/private dsa key pair.
Enter file in which to save the key (/home/mybackup/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/mybackup/.ssh/id_dsa.
Your public key has been saved in /home/mybackup/.ssh/id_dsa.pub.
The key fingerprint is:
20:7c:c3:b4:69:a7:e1:af:f3:e3:ae:e7:9d:0a:b6:69 mybackup@slave.isyi.com
注意:
当提示 Enter passphrase (empty for no passphrase): 时,不要输入,直接回车;并且提示 Enter same passphrase again: 时,也直接回车。


这时候,我们就会得到公钥、私钥两个文件在.ssh目录下。我们查看一下:

$ ls -al .ssh
total 8
drwxr-xr-x 2 mybackup mybackup 512 Mar 22 17:48 .
drwxr-xr-x 3 mybackup mybackup 512 Mar 22 17:46 ..
-rw------- 1 mybackup mybackup 672 Mar 22 17:48 id_dsa
-rw-r--r-- 1 mybackup mybackup 613 Mar 22 17:48 id_dsa.pub

其中 id_dsa 是密钥文件,id_dsa.pub 顾名思义,是公钥文件啦。

[] 拷贝到客户端

因为我们之前生成的公钥、密钥,都是在源服务器上操作。而客户端(做备份的服务器)上,需要有刚才生 成的公钥,才能不提示输入密码,直接登录ssh。

使用scp来远程拷贝:

$ scp /home/mybackup/.ssh/id_dsa.pub root@192.168.11.11:/home/mybackup/.ssh/authorized_keys

如果用户名、密码和文件路径没有错误,在按提示输入192.168.11.11的root密码后,很 快就会把id_dsa.pub文件拷贝过去了。

[] 测试登录

将公钥拷贝到客户端后,我们来测试下能不能在源服务器上不用输入密码ssh登录客户端服务器。

$ ssh -l mybackup 192.168.11.11

或者:

$ ssh mybackup@192.168.11.11

如果没有提示输入密码,就登录到192.168.11.11 服务器,那恭喜你,说明配置成功了。

[] Rsync的配置

事实上,我们在利用SSH通道来运行RSYNC时,是不需要配置一个Rsync服务器的。在这里我们 指的配置,是有两方面,一是运行rsync的参数,一是运行同步控制的脚本。

[] Rsync的常用参数

rsync 常用的运行参数说明:

-v, –verbose 详细模式输出
-c, –checksum 打开校验开关,强制对文件传输进行校验
-a, –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, –recursive 对子目录以递归模式处理
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-e, --rsh=COMMAND 指定替代rsh的shell程序
--delete 删除那些DST中SRC没有的文件
--progress 显示备份过程
-t, --times 保持文件时间信息
-z, --compress 对备份的文件在传输时进行压缩处理
--stats 给出某些文件的传输状态

测试rsync同步,将A主机的/opt/etc同步到B主机的/tmp/myetc目录下:

$ rsync -vzrtopg --progress --stats --delete -e ssh /opt/etc mybackup@192.168.11.11:/tmp/myetc

然后到B主机的/tmp/myetc目录下看看,是不是发现一个etc目录,并且这个etc目录下面 的文件,跟A主机的/opt/etc目录下面的文件一样。

[] 控制脚本

因为往往备份的目录是相对固定的,如果每次备份都要输入那么长一串,会不会觉得很麻烦呢?那我们写一 个脚本来工作,并且利用crontab来定时定点的执行同步工作。

控制脚本代码如下:

#!/bin/sh
# rsyncer.sh
# author Jonsen Yang( 16hot )
# home
http://16hot.blog.isyi.com
# date 2007-03-20
#

LOCAL_DIR="/opt/etc" ;
REMOTE_USER="mybackup" ;
REMOTE_HOST="192.168.11.11" ;
REMOTE_DIR="/tmp/myetc" ;

RSYNC_CMD="/usr/local/bin/rsync" ;
RSYNC_LOG="/opt/var/log/rsync.log" ;

RSYNC_RUN="${RSYNC_CMD} -vzrtopg --progress --stats --delete -e ssh ${LOCAL_DIR} ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}";

${RSYNC_RUN} >> ${RSYNC_LOG} 2>&1;

# end rsyncer.sh


将 rsyncer.sh 脚本保存到 /opt/bin(或者你自己的工作目录)目录下,还要注意保证设置好mybackup用户可以执行的属性。

$ chmod +x /opt/bin/rsyncer.sh

另外,要注意 /opt/var/log/rsync.log 也必须是mybackup帐户可以读写才行。

[] 运行

经过上面的步骤后,可谓万事俱备,只欠运行了。其实也很简单,我们只需要设置crontab,定时执 行备份脚本进行备份就可以了。

$ crontab -e
0 3 * * * /opt/bin/rsyncer.sh

这样,每天凌晨3点,就会自动执行 /opt/bin/rsyncer.sh 进行备份了。

[] 结束语

在开源软件里,很多很多很好用而且分文不收的软件。我们合理的利用这些软件,可以为我们带来很多很多 好处。比如,节省成本,提高工作效率等等。

因此,多学习开源软件,是很好的。


作者: Jonsen Yang( 16hot、 杨明茂 )

[] 附录 [] RSYNC 参数详解 -v, –verbose 详细模式输出
-q, –quiet 精简输出模式
-c, –checksum 打开校验开关,强制对文件传输进行校验
-a, –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, –recursive 对子目录以递归模式处理
-R, –relative 使用相对路径信息
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
--backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, --links 保留软链结
-L, --copy-links 想对待常规文件一样处理软链结
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
--safe-links 忽略指向SRC路径目录树以外的链结
-H, --hard-links 保留硬链结
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-D, --devices 保持设备文件信息
-t, --times 保持文件时间信息
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, --dry-run现实哪些文件将被传输
-W, --whole-file 拷贝文件,不进行增量检测
-x, --one-file-system 不要跨越文件系统边界
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, --rsh=COMMAND 指定替代rsh的shell程序
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
--delete 删除那些DST中SRC没有的文件
--delete-excluded 同样删除接收端那些被该选项指定排除的文件
--delete-after 传输结束以后再删除
--ignore-errors 及时出现IO错误也进行删除
--max-delete=NUM 最多删除NUM个文件
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
--force 强制删除目录,即使不为空
--numeric-ids 不将数字的用户和组ID匹配为用户名和组名
--timeout=TIME IP超时时间,单位为秒
-I, --ignore-times 不跳过那些有同样的时间和长度的文件
--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T --temp-dir=DIR 在DIR中创建临时文件
--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 --partial
--progress 显示备份过程
-z, --compress 对备份的文件在传输时进行压缩处理
--exclude=PATTERN 指定排除不需要传输的文件模式
--include=PATTERN 指定不排除而需要传输的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件
--version 打印版本信息
--address 绑定到特定的地址
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
--port=PORT 指定其他的rsync服务端口
--blocking-io 对远程shell使用阻塞IO
--stats 给出某些文件的传输状态
--progress 在传输时现实传输过程
--log-format=FORMAT 指定日志文件格式
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes per second
-h, --help 显示帮助信息

-----------------------------------------
rsync 备份方案
rsync 镜像备份
配置 rsync 

系统环境
[root@linuxas3 root]# uname -a

Linux linuxas3.9812.net 2.4.21-4.ELsmp #1 SMP Fri Oct 3 17:52:56 EDT 2003 i686 i686 i386 GNU/Linux

安装rsync

在AS3 第二张CD上找到rsync-2.5.6-20.i386.rpm

[root@linuxas3 root]# cd /mnt

[root@linuxas3 mnt]# mount cdrom

[root@linuxas3 mnt]# cd cdrom/RedHat/RPMS

[root@linuxas3 RPMS]# rpm -ivh rsync-2.5.6-20.i386.rpm
 
配置/etc/rsyncd.conf
在rh9,as3系统上rsync安装后,并没有创建rsyncd.conf文档,笔者是自己创建的rsyncd.conf文档

[root@linuxas3 root]# vi /etc/rsyncd.conf

uid=nobody

gid=nobody

max connections=4

use chroot=no

log file=/var/log/rsyncd.log

pid file=/var/run/rsyncd.pid

lock file=/var/run/rsyncd.lock

#auth users=root

secrets file=/etc/rsyncd.pwd

[postfix]

path=/var/mail

comment = backup mail

ignore errors

read only = yes

list = no

auth users = postfix

[netkiller]

path=/home/netkiller/web

comment = backup 9812.net

ignore errors

read only = yes

list = no

auth users = netkiller
[pgsqldb]

path=/var/lib/pgsql

comment = backup postgresql database

ignore errors

read only = yes

list = no

选择说明
uid = nobody 

gid = nobody 

use chroot = no         # 不使用chroot

max connections = 4     # 最大连接数为4

pid file = /var/run/rsyncd.pid       #进程ID文件

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log    # 日志记录文件

secrets file = /etc/rsyncd.pwd    # 认证文件名,主要保存用户密码,权限建议设为600,所有者root

[module]            # 这里是认证的模块名,在client端需要指定

path = /var/mail    # 需要做镜像的目录

comment = backup xxxx # 注释

ignore errors         # 可以忽略一些无关的IO错误

read only = yes       # 只读

list = no             # 不允许列文件

auth users = postfix  # 认证的用户名,如果没有这行,则表明是匿名

[other]

path = /path/to...

comment = xxxxx
密码文件

在server端生成一个密码文件/etc/rsyncd.pwd

[root@linuxas3 root]# echo postfix:xxx >>/etc/rsyncd.pwd

[root@linuxas3 root]# echo netkiller:xxx >>/etc/rsyncd.pwd

[root@linuxas3 root]# chmod 600 /etc/rsyncd.pwd

启动rsync daemon

[root@linuxas3 root]# rsync --daemon

测试
[root@linux docbook]#  rsync rsync://

[root@linux tmp]# rsync rsync://netkiller@
Password:
[chen@linux temp]$  rsync -vzrtopg --progress --delete postfix@
Password:
rsync rsync://认证用户@主机/模块
rsync -vzrtopg --progress --delete 认证用户@主机::模块 /mirror目录
添加到启动文件
echo "rsync --daemon" >> /etc/rc.d/rc.local 
            

更复杂的使用,请参考
rsync examples
-------------------------
rsync启动:

用xinetd启动后绑在 TCP/873 端口

1.修改启动文件:

#vi /etc/xinetd.d/rsync

# default: off

# description: The rsync server is a good addition to an ftp server, as it \

#       allows crc checksumming etc.

service rsync

{

        disable = no

        socket_type     = stream

        wait            = no

        user            = root

        server          = /usr/bin/rsync

        server_args     = --daemon

        log_on_failure  += USERID

}

2.#nmap localhost

#netstat -antp |grep 873
---------------------------------------
其实就是两句话的事情:

1。设置本机能通过SSH无密码认证登陆到目标机器。

2。#crontab -l

01 2 * * * /usr/bin/rsync -Cavzoge ssh --delete /var/www/virtualhost/目标机器IP:/var/www/web-back

把本机上指定目录同步到目标机器上;以本机为准,把目标主机上的资料改删的删,改增的增。



阅读(1155) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~