rsync多服务器文件同步

1、服务端配置 创建配置文件rsyncd.conf

vi /etc/rsyncd.conf  

-----------------------------------------------------------------------

uid = root

gid = root


use chroot = no


read only = yes


#limit access to private LANs

hosts allow=192.168.1.0,192.168.1.168   #多服务器 , 线隔开

hosts deny=*

max connections = 5  #连接数


pid file = /var/run/rsyncd.pid  #pid位置


secrets file = /etc/rsyncd.secrets  #密码文件存放位置

#lock file = /var/run/rsync.lock           


#motd file = /etc/rsyncd.motd         #欢迎页面


#This will give you a separate log file

log file = /var/log/rsync.log


#This will log every file transferred - up to 85,000+ per user, per sync

transfer logging = yes


log format = %t %a %m %f %b

syslog facility = local3

timeout = 300


# MODULE OPTIONS

[web]  #模块名称 多目录要同步的时候 可以添加多一个模块

path = /home/www/web/  #要同步的目录 源服务器

list=yes

ignore errors

auth users = root  #源服务器的用户名

comment = tongbu   #描述                  

exclude =


。。。。


2、创建服务端的密码文件,用于客户端登录的时候验证,所以客户端存放的密码必须为下面的密码:

vi /etc/rsyncd.secrets


root:g88888


chmod 600 /etc/rsyncd.secrets #更改文件权限


启动:

/usr/bin/rsync --daemon &


3、客户端配置

vi /etc/rsyncd.secrets   #这里也是创建密码文件


g88888这里是服务端rsync服务授权密码


chmod 600 /etc/rsyncd.secrets #更改文件权限


创建同步脚本:

#!/bin/bash

rsync -vzrtopg --delete --exclude "upload/" --progress

--password-file=/etc/rsyncd.secrets root@192.168.1.168::web /home/www/web


其中的 upload 文件夹表示不做同步


4、然后在主服务器上创建同步脚本 通过ssh远程执行客户端的同步命令

ssh -p22 root@192.168.1.0 /root/rs.sh

ssh -p22 root@192.168.1.168 /root/rs.sh


5、为了避免文件同步的时候 需要输入密码 需完成以下配置:


第一步:生成密匙对,我用的是rsa的密钥。触发同步的服务器上使用命令# ssh-keygen -t rsa

生成的过程中提示输入密钥对保存位置,直接回车,接受默认值就行了。

接着会提示输入一个不同于你的password的密码,直接回车,让它空着。当然,也可以输入一个,这样密钥对就生成完了。


其中公共密钥保存在 ~/.ssh/id_rsa.pub


私有密钥保存在 ~/.ssh/id_rsa


然后改一下 .ssh 目录的权限,使用命令 chmod 755 ~/.ssh


第二步:把这个密钥对中的公共密钥复制到你要访问的机器上去,

并保存为 ~/.ssh/authorized_keys.

例如:scp .ssh/id_rsa.pub 192.168.1.168:/root/.ssh/authorized_keys

这样就大功告成了。之后你再用ssh scp sftp 之类的访问那台机器时,就不用输入密码了