面临的需求:在两个服务器之间进行安全的文件同步。首选的方法用 rsync ,如何与 SSH 集成在一起呢 ? 我以前还真的没试验过。到 del.icio.us 上查找. 现在如果查找技术文档,del.icio.us 成了我的首选资料库,只要被人收录的文章,基本上质量都不错。
实现起来还是相对比较简单的。
1 安装 rsync.
我的操作系统是 AIX ,到 IBM 的站点下载软件.可以直接用 RPM 工具包远程安装。
2 创建公钥并配置
为了避免每次都询问口令(假定 OpenSSH 已经安装就绪),需要创建密钥。用 ssh-keygen 工具。然后把公钥添加到 rsync 的 Server 端相关用户目录下的 .ssh/authorized_keys 文件中。
关于这个过程,前几天看到一段很浅显的解释,稍加改编一下:
SSH 告诉远程 Server 端的 sshd ,它想使用 RSA 认证协议…远程的 sshd 会生成一个随机数,并用我们先前拷贝过去的公钥对这个随机数进行加密。然后, sshd 把加密了的随机数发回给正在 本地服务器上运行的 ssh 。接下来,我们的 ssh 用 专用密钥对这个随机数进行解密后,再把它发回给远程服务器,类似于声明一下:“瞧,我真的有匹配的专用密钥;我能成功的对您的消息进行解密!”最后, 远程 sshd 得出结论,既然人家真的有该专用密钥,就应当让人家登录。因此,我们有匹配的专用密钥这一事实授权我们访问远程服务器
3 测试是否可正常运行
rsync -av -e ssh remote_host:/opt/backup /backup/
注:很多文档都提及需要Server端的 Demon 需要启动,如果通过 ssh 的方式是不用的。更为灵活一些。
BTW: Lou Fangxin 提示我说采用压缩方式传输会更节省网络带宽。
4 定制 Crontab ,使得任务自动化运行.
参考文档:
- Using Rsync and SSH
- 通用线程: OpenSSH 密钥管理 上面那段关于认证的解释就是这位 Gentoo 的大牛说的。
这是因为rsync默认的选项还是rsh模式, 如果自已编译一下, 可以改这个选项的.
我们公司内部就是有一个perl写的小工具用openssh和rsync,来发布测试机器的文件内容到生产机器的
压缩的方式其实有的时候更慢 :)
压缩方式慢可能是因为主机的CPU不够. 网络不好时, 压缩很有用的.
Pingback: 使用 rsync 同步 | 上善如水