搭建rsync服务来同步配置


Rsync 是一个远程数据同步工具,使用 Rsync 算法同步本地和远程主机之间的文件。

搭建rsync服务来同步配置


1. 服务介绍

Rsync 本来是用于替代 scp 的一个非常有名的同步工具,目前是由 samba 软件基金会来维护和管理的,所以其配置文件 rsync.conf 的格式非常类似于 samba 的主配置文件格式。该同步工具可以通过 rshssh 协议来使用,也能以 daemon 模式去运行,在以daemon 方式运行时 rsync server 会打开并监听一个 873 端口,等待客户端去连接。连接时,rsync server 会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,以后则就只需进行增量备份。

  • Rsync 的几大特性如下:
  1. 可以镜像保存整个目录树和文件系统
  2. 可以很容易做到保持原来文件的权限、软硬链接等信息
  3. 无需特殊权限即可安装,非常方便和快捷
  4. 支持匿名传输,以方便进行网站镜象
  5. 可以使用scpssh等方式来传输文件,当然也可以通过socket连接
  6. 在传输数据的过程中实行压缩及解压缩操作节省带宽,同时也支持增量同步

Rsync 支持大多数的类 Unix 系统,无论是 LinuxSolaris 还是 BSD 上都经过了良好的测试。此外,它在 windows 平台下也有相应的版本,如 cwrsyncSync2NAS 等工具。

# 配置文件
/etc/rsyncd.conf

# 授权用户信息
/etc/rsync.passwd

# 配置文件模板路径(有可能没有)
/usr/share/doc/rsync-3.1.2/example/rsyncd.conf

2. 服务端配置

  • [1] 服务配置文件 - rsyncd.conf
[root@b8013bede7b9 ~]# cat /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.

# 运行rsync守护进程的用户和组
uid = root
gid = root

# 不使用chroot功能
use chroot = yes

# 设置最大连接数
max connections = 4

# 是否检查口令文件的权限
strict modes = yes

# 设置rsync守护进程运行的端口,默认为873端口
port = 873

# 设置PID/锁文件/日志文件的存放位置
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log

# 超时时间,单位为秒
timeout = 900

# 同步的时候排错那些文件,多个有空格分隔即可
exclude = lost+found/

# 使服务器使用记录下载和上载操作在自己单独的日志中
transfer logging = yes

# 设定日志格式
log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.

# 设定rysnc服务器忽略那些没有访问文件权限的用户
ignore nonreadable = yes

# 告诉rysnc那些文件在传输前不用压缩,默认已设定压缩包不再进行压缩
# dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

# 设置模块名称,用于同步的时候使用
[backup]
    # 指定共享文件路径、注释信息、权限、是否可列出
    path = /data/app/backup
    comment = "backup export area"
    # 同步的时候需要将其修改为no,否则无法上传同步操作
    read only = yes
    list = yes

    # 密码和用户名对比表,密码文件自己生成
    secrets file = /etc/rsync.passwd

    # 认证的用户名,服务器必须存在这个系统用户,多个由逗号或者空格分隔
    # 如果没有这行则表明是匿名,此用户与系统无关
    auth users = escape

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

    # 允许主机
    hosts allow = 192.168.1.1,10.10.10.10

    # 禁止主机
    hosts deny = 0.0.0.0/0
    transfer logging = yes
  • [2] 服务运行方式 - xinetd
# 方式一
/usr/local/rsync/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf

# 方式二
配合将其添加到xinet服务列表中,集中进行管理
# 安装rsync和xinetd服务
$ sudo apt install rsync xinetd

# 修改xinetd管理rsync的配置文件
$ cat /etc/xinetd.d/rsync
service rsync
{
    disable         = no
    socket_type     = stream
    wait            = no
    user            = root
    server          = /usr/bin/rsync
    server_args     = --daemon --config=/etc/rsyncd/rsynd.conf
    log_on_failure  += USERID
}

# 生效配置
$ sudo service xinetd start
$ /etc/init.d/xinetd reload

# 启动服务与自启动
$ sudo chkconfig rsync on
  • [3] 服务端密码文件 - rsync.passwd
# 文件权限一定要是600的权限,否则会报错
[root@b8013bede7b9 ~]# cat /etc/rsync.passwd
user:password
escape:123456
  • [4] 可配置环境信息 - rsyncd.motd
# 文件权限一定要是600的权限,否则会报错
[root@b8013bede7b9 ~]# cat /etc/rsyncd.motd
Welcome to escape the rsync services!

3. 同步配置方式

  • [1] 客户端设置密码
# 设置密码
echo 123456 > /etc/rsync.password

# 文件的权限必须为 600
chmod 600 /etc/rsync.password
  • [2] 从服务端获取配置文件
# 会删除/homt/app下的所有文件
$ rsync -vzrtopg --progress \
    --delete --password-file=/etc/rsync.password \
    [email protected]::backup /home/app
# 使用ssh协议进行文件的传输
$ rsync -avz --progress \
    -e 'ssh -p 1234' --delete \
    --password-file=/etc/rsync.password \
    [email protected]:/www/data /home/nginx/data
  • [3] 向服务端上传配置文件
# 目录带有/的话,表示备份该目录下的所有文件但不会创建该目录
# 目录带有/的话,则表示会创建该目录
$ rsync -vzrtopg --progress \
    --password-file=/etc/rsync.password \
    /home/app [email protected]::backup
# 使用ssh协议进行文件的传输
$ rsync -avz --progress \
    -e 'ssh -p 1234' /home/nginx/data
    --password-file=/etc/rsync.password \
    [email protected]:/www/data --exclude nginx/logs
  • [4] 添加防火墙规则
# 开启防火墙873端口的外部访问
$ iptables -A INPUT -p tcp -m state --state NEW  -m tcp --dport 873 -j ACCEPT

# 重启防火墙使得设置生效
$ systemctl reload iptables
# 开启防火墙873端口的外部访问
$ firewall-cmd --zone=public --add-port=873/tcp --permanent

# 重启防火墙使得设置生效
$ firewall-cmd --reload

4. 设置 SSH 无密码同步

  • [1] 本地服务器
# 本地指定用户创建SSH的公私秘钥
$ ssh-keygen -t rsa -b 2048 -f /home/thisuser/cron/thishost-rsync-key

# 复制对应用户的公钥到远程主机上
$ scp /home/thisuser/cron/thishost-rsync-key.pub remoteuser@remotehost:/home/remoteuser/
  • [2] 远程服务器
# 将复制的用户公钥加入信任列表中
$ if [ ! -d .ssh ];then mkdir .ssh; chmod 700 .ssh; fi
$ mv thishost-rsync-key.pub .ssh/
$ cd .ssh/
$ if [ ! -f authorized_keys ];then touch authorized_keys; chmod 600 authorized_keys; fi
$ cat thishost-rsync-key.pub >> authorized_keys
  • [3] 文件同步命令
# 可以将其加入crontab列表中定是执行
$ rsync -avz -e \
    "ssh -i /home/thisuser/cron/thishost-rsync-key" \
    remoteuser@remotehost:/remote/dir /this/dir/

文章作者: Escape
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Escape !
  目录