rsync服务模式+客户端访问

介绍

  1. rsync是一个差异同步备份工具,也是一种数据发送/ 差分备份 许可协议。 可以实现把服务器上的一些文件备份到另一台电脑上,而且是差异备份,这是用它的关键,也是取代scp的关键。  网上关于这个的介绍也有很多, 就不多作介绍了。
  2. rsync有不同的工作模式, 主要就3种。
    1. 在同一台机器上用,跟cp差不多的用法。
    2. 跟scp一样的远程shell模式
    3. 服务器模式。
  3. 我们要用的就是服务器模式。
  4. 这里要用的是由xinetd超级守护进程来控制的rsync服务。 当然也可以不用,到那一步再说啦。

环境: 1. CentOS6.6_x86_64

2. rsync 3.0.6

3. 防火墙关闭,  SElinux 关闭。

正文:



一、 安装程序软件。

首先我们的服务器上需要有xinetd和rsync。如果没有yum安装就可以啦。

yum -y install xinetd
yum -y install rsync

还有说明一下, 服务端和客户端是同一个软件,  它是不分服务端和客户端的, 只是分启动模式,也就是启动的时候要加的选项参数啦。

如果rsync事先就已经安装,而xinetd没有安装,有可能会发现没有/etc/xinetd.d/rsync文件,直接重新安装一下rsync就行, 一般情况下也不会这样, 我电脑系统就是自带的rsync,后装的xinetd, 有那个文件。

yum -y reinstall rsync

我们来看一下/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 = yes
        flags           = IPv6
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}

看到server_args后面那个--daemon了吧, 那个就是以守护进程的方式来启动rsync,也就是服务器模式的启动方式啦。 还有那个disable, 一会儿启动的时候可以把yes改为no,也可以用chkconfig来修改。  还有一个比较有意思的 flages, 在我的电脑这里要改成IPv4,要不然就监听在ipv6的地址上了。



二、配置文件。

配置/etc/rsyncd.conf文件, 可能会没有这个文件,创建一个就可以。

内容分为两个部: 1 全局配置,    2 数据共享目录。

数据共享目录可以配置多个。

# Global Settings   全局配置

uid = nobody                    #工作进程用户,运行进程的用户

gid = nobody         #工作进程组, 运行进程的用户组

use chroot = no                #是否使用chroot

max connections = 10       #最大连接,注意这可是实实在在的磁盘I/O,所以连接数不要太多。

strict modes = yes               #是否是严格模式。

pid file = /var/run/rsyncd.pid       #pid文件路径

log file = /var/log/rsyncd.log       #日志文件路径

# Directory to be synced  目录

[synced_name]                      #synced共享名称

path = /path/to/some_dir             #共享目录路径

ignore errors = yes       #是否忽略错误

read only = no                       #是否是只读,只可以拉取数据。pull

write only = no                       #是否是只写,只可以推送数据。push

hosts allow = white_list_ip/net/*      #白名单。

hosts deny = black_list_ip/net/*       #黑名单。

黑白名单说明: 默认会允许访问, 如果两项规则都没有匹配,则为默认。

只出现白名单时,匹配的允计,没有被白名单匹配的,按默认。

只出现黑名单时,匹配的拒绝,没有被匹配的按默认。

二者同时出现时,先检查白名单,匹配则允计。

否则,再检查黑名单,匹配则拒绝。

list = false#是否允许列出文件列表。

uid = root#以哪个用户的身份操作数据。

gid = root  #以哪个用户组的身份操作数据。

auth users = username     #自定义用户。

secrets file = /etc/rsyncd.passwd

#用户的密码文件。

大体上就这些配置,可以按自己的需要修改。还有一些如端口还有其它的,man rsyncd.conf

再凉下我自己的单子:

#Global setting
uid = nobody
gid = nobody
use chroot = no
max connections = 5
strict modes = yes
pid file=/var/run/rsyncd.pid
log file=/var/log/rsyncd.log

#
[test]
path=/var/test
ignore errors = yes
read only = no
write only = no
#hosts allow = 
#hosts deny = 
list = false
uid = root
gid = root
auth users = ursync
secrets file = /etc/rsyncd.passwd

建立密码文件,密码文件的格式是: 用户:密码。

注意用户是你自定义的用户,在rsyncd.conf文件中出现的那个。

文件都是明文, 注意权限600。

-bash-4.1# cat /etc/rsyncd.passwd
ursync:iampasswd
-bash-4.1# chmod 600 /etc/rsyncd.passwd

我这里测试用的账户是ursync , 密码是:iampasswd

建立共享目录, 我这里是/var/test.。

一切搞定,启动服务。



三、启动服务( 换电脑了, 按照上面重新来了一遍,希望不会出现什么问题)

[[email protected] ~]# chkconfig --list rsync
rsync          	off
[[email protected] ~]# chkconfig rsync on
[[email protected] ~]# service xinetd start
Starting xinetd:                                           [  OK  ]
[[email protected] ~]#
[[email protected] ~]# ss -tnl | grep 873
LISTEN     0      64                       :::873                     :::*     
[[email protected] ~]#

果然,监听在ipv6的地址了。  把/etc/xinetd.d/rsync文件中的IPv6改成IPv4 。 重启xinetd服务。

[[email protected] ~]# service xinetd restart
Stopping xinetd:                                           [  OK  ]
Starting xinetd:                                           [  OK  ]
[[email protected] ~]# ss -tnl | grep 873
LISTEN     0      64                        *:873                      *:*

监听于873/tcp 端口。

服务启动完成,接下来就是测试了。

启动服务也可以不用xinetd来启动,直接rsync --daemon 启动也可以,只不过最好 再写个服务脚本来控制启动和关闭。



四、 客户端测试

rsync选项:

-n : 在不确定命令执行是否正确时,来进行测试执行,并输出信息上。

-v : --verbose, 详细输出模式

-q : --quiet,  静默模式,最小的信息输出。

-c :--checksum, 开启校验功能, 强制对文件传输进行校验。

-r : --recursive, 递归复制。

-a : --archives, 归档,相当于 -rlptgoD

-p : --perms, 保留文件的原有属性。

-t : --times     保留文件的时间戳。

-l : -links      复制符号链接文件,而不是跳过。

-g : --group     保留文件的属组。

-o : --owner     保留文件的属主。

-D : --devices   保留设备文件。

-e ssh:  表示使用ssh协议作承载  如:

rsync -e ssh -r /etc [email protected]:/tmp

-z:      对文件压缩后传输。

--progress  显示文件传输进度条。 不是整体的,是每一个文件的进度。

--stats     显示压缩和传输的状态。 完成以后的统计信息。

--password-file指定密码文件

选项挺多,不过用的时候也就 也就几个用的着。  看自己的选择了。这里做测试也就用 -a -v -e --password-file 这几个而已。

rsync的访问模式也有几种,man rsync 最上面就是。 我们访问服务器有2种, 也是看习惯了。 不用太介意啦。这里只帖一种。

         Pull: rsync [OPTION...] [[email protected]]HOST::SRC... [DEST]
         Push: rsync [OPTION...] SRC... [[email protected]]HOST::DEST

上面那个是从服务器到本机。 下面那个刚好是反过来。 都是固定的格式, 看那两个冒号 :: 。如果是一个冒号的话就不是连接服务器了,只是一般的shell模式。冒号后面跟的就是服务端的共享名称了。

多说无益,来试一下:把客户端的/etc上传到服务器。 也就是Push.

[[email protected] etc]# rsync -a /etc [email protected]::test
Password: 
[[email protected] etc]#

test就是服务端的共享名称.

没有加-v,所以没有显示过程, 大家测试的时候可以加上看看效果。 以现在服务端的配置,上传的符号链接文件都会自动加上/rsyncd-munged/,原因是因为rsync的安全机制导致的, 在 write only = on 并且,use chroot = no 的情况下就会这样。  至于use chroot这里就不说了, 只是给大家提醒下。

看看服务器的:

[[email protected] ~]# ls /var/test
etc
[[email protected] ~]#

注意因为我们上边写的是/etc,所以传的是/etc这个目录和下面所有文件。 如果写的是/etc/ 那么就是/etc下面的所有文件了。

客户端也可以指定密码文件, 直接在文件里面写上密码就可以, 注意啦, 只有密码,没有用户名, 跟服务端的密码文件不一样。

[[email protected] etc]# echo ‘iampasswd‘ > /etc/rsyncd.passwd
[[email protected] etc]# chmod 600 /etc/rsyncd.passwd

再来:Pull

[[email protected] etc]# rsync -a --password-file /etc/rsyncd.passwd [email protected]::test/etc/fstab /tmp
[[email protected] etc]# ll /tmp/fstab 
-rw-r--r--. 1 root root 969 Apr 12 17:53 /tmp/fstab

把服务端共享里面的etc目录下面的fstab 下载到本机的/tmp下。

重点说明一下-e选项。  -e 可以让rsync承载在别的安全机制下。  毕竟rsync是不加密传输的。

一般我们用ssh。  所以服务端要有ssh的守护进程,如openssh-server, 客户端要有ssh工具,如openssh-clients。

[[email protected] etc]# rsync -a --password-file /etc/rsyncd.passwd -e ssh [email protected]::test/etc/fstab /tmp
ssh: connect to host 192.168.1.200 port 22: Connection refused
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(600) [receiver=3.0.6]

上面指定-e ssh,  但是结果好像不怎么好, 因为我这里服务端的ssh端口不是22,而默认它是连接22端口的。 所以,这里可以用ssh的参数。  -p 指定端口,  -l 指定ssh登录用户。

再试试:

[[email protected] etc]# rsync -a --password-file /etc/rsyncd.passwd -e ‘ssh -p 23000 -l root‘ [email protected]::test/etc/ /tmp
[email protected]‘s password: 
[[email protected] etc]#

OK,可以了, 但是用的竟然是root用户, 别的用户我这里是会出故障的, 暂时也不清楚是什么问题。 而且如果换成别的用户, 备份就麻烦了。所备份文件属性是不能动的,而且既然是差异备份,那就肯定有些文件在备份的时候会被覆盖掉。别的用户想覆盖不同用户的文件,除了root是不可能的。

我了解的现在最好的方式就是用ssh公钥认证登录了。而对于这方面的这里就不多写了, 总体也就两条指令。

[[email protected] etc]# ssh-keygen -t rsa            #生成密钥对的指令。
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
c6:78:d2:68:20:c6:05:87:f5:ef:be:35:9e:88:4f:91 [email protected]
The key‘s randomart image is:
+--[ RSA 2048]----+
|  .++            |
| ..o .           |
|  + . .          |
| . . . * .       |
|      = E        |
|     . = .       |
|        o o      |
|       + + o     |
|      ..=.o      |
+-----------------+

生成密钥对的时候会让你输入保存的位置, 不用管 默认就可以。 然后会让你输入密钥的密码,这里可千万不要写, 我们是要用rsync所挂载的ssh的, 如果每一次连接使用密钥的时候都要输入密码,那不就跟前面一样了吗, 我们要的是自动。 而且对于备份服务来说,又不面对公网, 安全级别也不用太高啦。

第二条指令:  如果服务端的ssh端口是22的话:

ssh-copy-id [email protected]

就可以了。 会自动把公钥传到服务端的所属用户里去。    [email protected] 要用root登录啊。

如果服务端不是22端口就这样来指定端口:

ssh-copy-id "-p port [email protected]"

我这里的指令输出:

[[email protected] etc]# ssh-copy-id "-p 23000 [email protected]"
[email protected]‘s password: 
Now try logging into the machine, with "ssh ‘-p 23000 [email protected]‘", and check in:

  .ssh/authorized_keys

to make sure we haven‘t added extra keys that you weren‘t expecting.

[[email protected] etc]#

好啦,终于完成了。

[[email protected] etc]# rsync -a --password-file /etc/rsyncd.passwd -e ‘ssh -p 23000 -l root‘ [email protected]::test/etc/ /tmp
[[email protected] etc]#

没有任何的输出啊。  加上-v再试一个:

[[email protected] etc]# rsync -a -v --password-file /etc/rsyncd.passwd -e ‘ssh -p 23000 -l root‘ /var/named/ [email protected]::test
sending incremental file list
./
arch.star.com.zone
named.ca
named.empty
named.localhost
named.loopback
data/
dynamic/
slaves/

sent 2989 bytes  received 118 bytes  60.33 bytes/sec
total size is 2524  speedup is 0.81
[[email protected] etc]#

好啦, 基本的应用也就这样了。

最后发现: 用ssh的这种方式,服务端的rsync不用启动也可以, 直接是通过ssh端口来完成传输, 只要rsync软件存在,/etc/rsyncd.conf配置文件存在 就可以。

最后补充:rsync+inotify可以实现实时的同步, 大家有兴趣可以搞搞,以后再补上吧。



自己也是正在学习linux中,有很多的东西还都不懂,  如果有错误的,还请大侠们指出, 谢谢了。

时间: 2024-08-05 12:58:00

rsync服务模式+客户端访问的相关文章

wcf Rest 服务宿主在windows服务及客户端访问

首先写好服务,代码如下: 1 using System; 2 using System.Collections.Generic; 3 using System.Runtime.Serialization; 4 using System.ServiceModel.Web; 5 using System.ServiceModel; 6 7 8 namespace Artech.WcfServices.Service 9 { 10 [ServiceContract(Namespace = "Artec

Service系统服务(六):rsync基本用法、rsync+SSH同步、配置rsync服务端、访问rsync共享资源、使用inotifywait工具、配置Web镜像同步、配置并验证Split分离解析

一.rsync基本用法 目标: 本例要求掌握远程同步的基本操作,使用rsync命令完成下列任务: 1> 将目录 /boot 同步到目录 /todir 下   2> 将目录 /boot 下的文档同步到目录 /todir 下   3> 在目录 /boot 下新增文件 a.txt,删除 /todir 下的子目录 grub2,再次同步使 /todir 与 /boot 一致   4> 验证 -a.-n.-v.--delete 选项的含义 方案: 本地同步操作: rsync [选项...] 本

Samba服务windows客户端访问Linux共享报错

报错提示 不允许一个用户使用一个以上用户名与服务器或共享资源的多个链接.终端与此服务器或共享资源的所有连接,然后再试一次. 解决方法 原因是现在使用的机器曾经与服务器有过连接,连接断开后操作系统未将连接状态清除:在cmd下运行以下命令来清除系统记录列表. net use * /del /y 原文地址:https://www.cnblogs.com/qiaokeshushu/p/9363277.html

linux rsync服务

1.rsync介绍rsync是一个开源的,快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具,rsync软件适用于nunix/linux/windows多操作系统上运行.官方网站:http://www.samba.org/ftp/rsync/rsync.htmlrsync 英文全称为remote rynchronization.rsyn的特性:1)支持拷贝特殊文件如连接文件,设备等.2)可以有排除指定文件或目录同步到功能,相当于打包命令tar的排除功能.3)可以做到保持原文件或

# Rsync服务实战

目录 Rsync服务实战 1 安装rsync软件 2 配置 /etc/rsyncd.conf 3 创建用户(运行rsync服务的用户身份) 4 创建虚拟用户密码文件(客户端连接时候使用) 5启动 rsync 服务,并加入开机自启 6检查对应的端口 873 7测试 (客户端也安装rsync 但是不启动服务) 8其他 客户端推送脚本 服务端接收文件并校验发送邮箱 1.配置邮箱(配发件服务器) 2 服务端脚本 定时任务 Rsync服务实战 客户端需求 1.客户端每天凌晨01点在服务器本地打包备份(系统

搭建backup服务器rsyncdaemon服务模式之二rsync客户端配置

1.检查客户端是否有rsync服务: [[email protected] ~]# rsync --versionrsync  version 3.0.6  protocol version 30Copyright (C) 1996-2009 by Andrew Tridgell, Wayne Davison, and others.Web site: http://rsync.samba.org/Capabilities:    64-bit files, 64-bit inums, 64-b

Spring提供的用于访问Rest服务的客户端:RestTemplate实践

什么是RestTemplate? RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率.调用RestTemplate的默认构造函数,RestTemplate对象在底层通过使用java.net包下的实现创建HTTP 请求,可以通过使用ClientHttpRequestFactory指定不同的HTTP请求方式.ClientHttpRequestFactory接口主要提供了两种实现方式

(转)基于OWIN WebAPI 使用OAuth授权服务【客户端模式(Client Credentials Grant)】

适应范围 采用Client Credentials方式,即应用公钥.密钥方式获取Access Token,适用于任何类型应用,但通过它所获取的Access Token只能用于访问与用户无关的Open API,并且需要开发者提前向开放平台申请,成功对接后方能使用.认证服务器不提供像用户数据这样的重要资源,仅仅是有限的只读资源或者一些开放的 API.例如使用了第三方的静态文件服务,如Google Storage或Amazon S3.这样,你的应用需要通过外部API调用并以应用本身而不是单个用户的身份

rsync服务端和客户端配置自动化配置脚本

系统版本CentOS release 6.9 (Final)2.6.32-696.el6.x86_64 x86_64 rsync 服务端IP:172.16.1.41 计算机名:backuprsync客户端IP:172.16.1.31 计算机名:nfs 服务器配置: [[email protected] scripts]# cat backup_server.sh #!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/