记一次rsync增量同步远程服务器文件

rsync remote shell 增量方式同步数据

rsync同步文件有两种方式,一种是daemon的方式(rsync daemon)另一种方式是通过远程shell方式(rsync remote shell)。

两种方式的区别

daemon方式,这种方式通过TCP方式连接远程rsync daemon,需要使用配置文件,并启用daemon进程。

rsync [OPTION] user@host::src dest
rsync [OPTION] src user@host::dest

remote shell方式,这种方式不需要使用配置文件,也不需要daemon进程。

rsync [OPTION] user@host:src dest
rsync [OPTION] src user@host:dest

daemon方式太麻烦了,好要去设置配置文件和daemon进程,因此我选用了remote shell方式,就像下面这样去同步:

  rsync -avr --delete yanruitao@123.123.123.123:/export/test/htdocs/files/ /export/test/htdocs/files/

其中参数avr --delete分别表示

-a 归档(archive)模式,以递归方式传输文件,并保持文件属性
-v 输出同步的详细信息(verbose)
-r 对子目录进行递归模式处理(recursive)
--delete 删除源(SRC)中没有目标(DST)中有的文件

如果一切正常的话,当运行上面的同步命令,会提示输入远程机器yanruitao用户的密码(第一次的话会提示是否建立关系(好像是,具体忘了),直接回车就行),执行完之后会按照规则去同步。

但是有个问题,我要添加一个crontab任务,在每天2点钟去增量同步一次,这个时候我不能去输密码,这个时候就得在两台机器上建立信任关系

两台机器之间建立信任关系

在建立信任关系之前先看看基于公钥、私钥的加密和认证

私钥签名过程

下面这张图是盗来的,哈哈,用这张图理解认证过程再合适不过了:

消息-->[私钥]-->签名-->[公钥]-->认证
私钥数字签名,公钥验证
  1. Alice生成公钥和私钥,并将公钥发送给Bob。
  2. Alice用自己的私钥生成签名,也就是加密。
  3. Alice将签名的信息发送给Bob。
  4. Bob用Alice的公钥进行解密,验证签名真伪。
公钥加密过程

下面这张图也是盗来的(有图就是好理解),下面是Alice通过对称密钥技术发送信息给Bob:

消息-->[公钥]-->签名后的消息-->私钥-->解密后的消息
公钥加密,私钥解密
  1. Bob生成自己的公钥和私钥,并将公钥发送给Alice。
  2. Alice用Bob的公钥对信息进行加密。
  3. Alice将加密后的信息发送给Bob。
  4. Bob用他的私钥进行解密,得到Alice发送的信息。

建立主机之间的信任关系

了解了上面公钥和私钥的知识,现在我们来在两个主机之间建立信任关系,,,要在101上对100建立信任关系(也就是100登录101的时候不需要输入密码),这个时候就用到了私钥签名的过程:

在yanruitao192.168.1.100的家目录下生成公钥和私钥(已经有的可以忽略)
ssh-keygen -t rsa
#执行完之后会在家目录下的.ssh文件夹下生成id_rsa、id_rsa.pub两个文件,后者是公钥。
scp .ssh/id_rsa.pub yanruitao@192.168.1.101:/home/yanruitao/
#scp同样是通过remote shell的方式传送文件,回车之后会提示输入密码,此时
#还未建立信任关系,因此需要输入密码。确认100的公钥发送给101
在yanruitao192.168.1.101的家目录下对yanruitao192.168.1.100建立信任关系
#将刚才传送的100机器的公钥写入101yanruitao及目录下的.ssh/authorized_keys文件
cat id_rsa.pub >> .ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
#至此就在[email protected]192.168.1.101上对192.168.1.100建立了信任关系
设置crontab
0 */2 * * * rsync yanruitao@192.168.1.101:/export/wwwroot/hotdocs/files/ /export/wwwroot/hotdocs/files/
#设置完成,每天02:00分会执行一次增量同步
遇到的问题

当然了,自己实际操作的时候可能遇到问题,我在弄的时候,两台机器的用户名是不同的,一个yanruitao一个mywife(哈哈,勿笑),在yanruitao对mywife简历信任关系,这个时候就需要重新在mywife家目录下操作上面的建立信任关系步骤。还有一个问题就是,在mywife机器上的/export/wwwroot/htdocs/files/文件夹的所有者一定要是mywife:

#修改文件夹所有者为mywife
sudo chown mywife:users /export/wwwroot/htdocs/files/

不然可能会报错(具体错误我忘了,在公司碰到的),虽然好像不影响同步,但是$?会返回23,影响下面的操作,这里也要留意下。

参考文章

http://www.williamlong.info/archives/837.html
http://www.cnblogs.com/ymy124/archive/2012/04/04/2432432.html
http://www.zhihu.com/question/25912483

本文版权归作者iforever()所有,未经作者本人同意禁止任何形式的转载,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。

时间: 2024-07-29 14:24:23

记一次rsync增量同步远程服务器文件的相关文章

安装SFTP/FTP插件快速编辑远程服务器文件

默认的Sublime Text 3 是没有sftp/ftp功能的,如果编辑器自带ftp势必会提高开发效率,虽然Sublime Text 3 默认是没有ftp功能,但是安装sftp插件很容易.下面是我安装步骤,希望能帮助那些喜欢Sublime Text 3的朋友. 按下Ctrl+Shift+P调出命令面板 输入install 调出 Install Package 选项并回车,然后输入ftp,下拉列表中会出现一些相关的插件,选中sftp进行安装就行了, 出现下图说明安装成功了. 装好后还需配置如下:

rsync的使用——远程服务器同步配置

一.背景介绍 由于需要和其他系统进行对接.文件的逻辑地址通过接口传递,而文件的实体需要通过服务器间的同步进行传输.在同事的建议下选择了rsync. 二.RSYNC介绍 RSYNC 有多种方式进行同步,本篇文章主要叙述的是其中,两种远程服务器的同步配置.(在客户端 注意命令中":" 冒号的个数) 要了解更多关于rsync的内容,请跳转到 http://man.linuxde.net/rsync 阅读相关文档. 三.实际操作 3.1 确认机器是否安装rsync 3.2 配置rsync的文件

python 增量同步远程文件夹

因为发的时候,有些敏感信息没去除,所以大家发文的时候,切记要过滤.不然抓取的很厉害. 这个脚本的作用是同步远程机器的少量log到一台机器上,然后通过logstash过滤显示 犯了好几个错误 local写错locals,locals是python特有定义变量的,不能重名 sftp老报错,IOError: [Errno 2] No such file,这个是因为没有创建本地目录 第一次全量同步,第二次同步五分钟之内修改的文件 特别对列表的处理,用strip去除\n read()和readlines的

Centos 6.5 rsync+inotify 两台服务器文件实时同步

rsync和inotify是什么我这里就不在介绍了,有专门的文章介绍这两个工具. 1.两台服务器IP地址分别为: 源服务器:192.168.1.2 目标服务器:192.168.1.3 @todo:从源服务器(192.168.1.2)的/www/目录下的所有的文件实时同步到目标服务器(192.168.1.3)的/www_bak/目录下 源服务器下需要安装rsync和inotify,源服务器做为server端,实时的向目标服务器client端发送数据 2.安装 rsync 一般centos6.5下都

eclipse同步远程服务器

eclipse里有一个强大的插件,可以直接在本地编辑远程服务器代码,Eclipse Remote System Explorer (RSE) 下载安装方法: 一.下载,高版本的eclipse可以直接下载, 1.打开help——Eclipse Market Place,在find里输入remote搜索,搜索过程可能会有些慢 2.找到Remote System Explorer,点击installed,至此下载安装完毕 二.配置 1.打开windows——Perspective——Open Pers

python+rsync精确同步指定格式文件

# coding: utf-8 #!/usr/bin/env python ''' updatedb更新本地服务器指定目录/home/upload/de locate.dbz数据库 然后locate命令正则查找符合条件的文件并将文件名输出到locate.src 通过paramiko模块得到远程服务器符合条件的文件并将文件名输出到locate.dst 比较这两个文件得到locate.diff,最好rsync命令同步locate.diff列表中的文件 到远程服务器 ''' import parami

rsync服务同步、日志文件、screen工具

10.32 rsync通过服务同步(上) 在使用该方法进行同步之前需要先在服务的开启相应服务同时要监听一个端口(可自定义),默认是监听873端口,开启服务之前编辑rsync配置文件"/etc/rsyncd.conf"(将服务添加进去)然后直接使用命令:"rsync --daemon(服务名称)"进行同步.或者将配置文件写到一个自定义文件中,使用命令"rsync --configfile"进行同步.配置完成后客户端可以通过指定端口与服务端进行通信.

Rsync 自动同步压缩日志文件至备份服务器

业务场景:将所有服务器内的日志文件以小时为单位压缩后保存同时清空源日志文件.此后通过rsync + inotify 机制将压缩文件统一备份到日志服务器内.实现对日志文件的统一保存和备份.rsync 和inotify这里就不介绍了!有兴趣的可以到官网查看.大致服务架构图: 一.三台机器的IP分别为:br/>源服务器:172.20.2.108目标(备份)服务器:172.20.2.225@todo:从源服务器(172.20.2.108)的/data/目录下的所有的文件实时通过到目标服务器(172.20

Java读取远程服务器文件到本地

=======================华丽的分隔线============================= 查看源代码可以看到openChannel()可选值如下: =====================华丽的分隔线============================= =======================华丽的分隔线============================ 其实,最简单到,最直接的还是用scp命令 因为,如果以上程序能够运行就一定可以通过ssh登录到