记一次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点钟去增量同步一次,这个时候我不能去输密码,这个时候就得在两台机器上建立信任关系
两台机器之间建立信任关系
在建立信任关系之前先看看基于公钥、私钥的加密和认证
私钥签名过程
下面这张图是盗来的,哈哈,用这张图理解认证过程再合适不过了:
消息-->[私钥]-->签名-->[公钥]-->认证
私钥数字签名,公钥验证
- Alice生成公钥和私钥,并将公钥发送给Bob。
- Alice用自己的私钥生成签名,也就是加密。
- Alice将签名的信息发送给Bob。
- Bob用Alice的公钥进行解密,验证签名真伪。

公钥加密过程
下面这张图也是盗来的(有图就是好理解),下面是Alice通过对称密钥技术发送信息给Bob:
消息-->[公钥]-->签名后的消息-->私钥-->解密后的消息
公钥加密,私钥解密
- Bob生成自己的公钥和私钥,并将公钥发送给Alice。
- Alice用Bob的公钥对信息进行加密。
- Alice将加密后的信息发送给Bob。
- Bob用他的私钥进行解密,得到Alice发送的信息。

建立主机之间的信任关系
了解了上面公钥和私钥的知识,现在我们来在两个主机之间建立信任关系,假设有两台机器yanruitao@192.168.1.100,yanruitao@192.168.1.101,要在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
#至此就在yanruitao@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(luluyrt@163.com)所有,未经作者本人同意禁止任何形式的转载,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
记一次rsync增量同步远程服务器文件的更多相关文章
- Pycharm同步远程服务器调试
Pycharm同步远程服务器调试 1.需要准备工具 xftp:上传项目文件 xshell:连接Linux系统调试,执行命令 PyCharm:调试python代码 这些软件可以自行网上搜索下载,也可以关 ...
- 在 Sublime Text 2 中使用 SFTP 插件快速编辑远程服务器文件
在 Sublime Text 2 中使用 SFTP 插件快速编辑远程服务器文件 开源程序 浏览:29555 2013年05月02日 文章目录[隐藏] 常见的工作流程 SFTP 安装和使用方法 第一步: ...
- JCIFS读取远程服务器文件过慢的解决方法
JCIFS读取远程服务器文件过慢的解决方法 发表于3年前(2013-07-12 11:23) 阅读(1174) | 评论(0) // 我要收藏"; var favor_del = &qu ...
- java使用sftp下载远程服务器文件
使用的是springboot的项目,只是贴出主要配置与类,代码较长,可以先折叠: 参考:https://www.cnblogs.com/xyzq/p/7049369.html 操作工具类SftpUti ...
- 本地VSCode编辑远程服务器文件
前言 先说下我的场景:服务器搭设了一系列复杂环境,然后需要使用PHP实现某些功能 选这种远程编辑的原因: 首先PHP打死我也不想装(这个现在是出了VB外最惹人厌的语言了) 然后环境比较复杂,本地装下比 ...
- #在windows上使用ngix重定向目录访问远程服务器文件详细实例
为了在开发环境保持于生产环境相同的访问远程服务器文件资源的目录配置,需要在开发环境(windows)在远程文件服务器使用nignx重定向文件目录,因为网上的资料大都是copy的,解释比较笼统,也没有具 ...
- puppet使用rsync模块同步目录和文件
puppet使用rsync模块同步目录和文件 2013-09-23 14:28:57 分类: LINUX 环境说明: OS : CentOS5.4 ...
- linux 同步 rsync的使用——远程服务器同步配置
一.背景介绍 由于需要和其他系统进行对接.文件的逻辑地址通过接口传递,而文件的实体需要通过服务器间的同步进行传输.在同事的建议下选择了rsync. 二.RSYNC介绍 RSYNC 有多种方式进行同步, ...
- Centos 6.5 rsync+inotify 两台服务器文件实时同步
rsync和inotify是什么我这里就不在介绍了,有专门的文章介绍这两个工具. 1.两台服务器IP地址分别为: 源服务器:192.168.1.2 目标服务器:192.168.1.3 @todo:从源 ...
随机推荐
- Redis简介-安装-入门
前言 我们team马上要用Redis了. 所以先学习一下这东西. Redis大名很早以前就听过了,以前在的公司都没有用到. 现在有机会终于接触到了,果断学习起来. 什么是redis Redis是完全开 ...
- 如何拿到半数面试公司Offer——我的Python求职之路
从八月底开始找工作,短短的一星期多一些,面试了9家公司,拿到5份Offer,可能是因为我所面试的公司都是些创业性的公司吧,不过还是感触良多,因为学习Python的时间还很短,没想到还算比较容易的找到了 ...
- Middleware的艺术
定义 Middleware直译叫中间件,目前在百度上很难找到一个简单明了的含义解释,.Net下以前也比较难以看到它的身影,但在Microsoft.Owin里,多个地方都看到MiddleWare,我近来 ...
- 用node.js实现简单的web服务器
node.js实现web服务器还是比较简单的,我了解node.js是从<node入门>开始的,如果你不了解node.js也可以看看! 我根据那书一步一步的练习完了,也的确大概了解了node ...
- SDRAM和dcfifo的联合
SDRAM和dcfifo的联合 设计原理 在"SDRAM突发读写页"实验中,留下了一个问题,就是从SDRAM读取数据的速度要与SDRAM的驱动时钟同步,这就造成了读出的数据的速率过 ...
- mybatis generator使用总结
一.mybatis项目的体系结构 百度mybaits,可以进入mybatis的github:https://github.com/mybatis. mybatis是一个大大的体系,它不是孤立的,它可以 ...
- 1415-2 计科&计高 软件工程博客&Github地址汇总-修正版
序号 标识 博客 代码 1 1121袁颖 joanyy joanyy 2 1122崔琪 chitty ChittyCui 3 1123吕志浩 lucy123 715lvzhihao 4 1124张静 ...
- ubuntu完全卸载nginx
删除nginx连带配置文件 sudo apt-get purge nginx # Removes everything. 卸载不再需要的nginx依赖程序 sudo apt-get autoremov ...
- supervisor program配置实例
program 配置 上面我们已经把 supervisrod 运行起来了,现在可以添加我们要管理的进程的配置文件.可以把所有配置项都写到 supervisord.conf 文件里,但并不推荐这样做,而 ...
- C++中函数的默认参数和C语言中volatile的学习
1.函数默认参数 1 int func(int a,int b=10) 2 { 3 return a*b; 4 } 5 6 int main() 7 { 8 int c=func(2); 9 cout ...