rsync是远程文件同步协议,在linux系统下,操作服务器之间的文件同步,是非常方便高效的。

但是,简单的rsync操作,往往需要和用户交互,需要用户输入密码,这个对于结合应用系统使用,比如Java调用linux指令实现同步的话,就不是很方便。

当然,也许读者会说,这个免密码操作还不简单,rsync+ssh,利用ssh的安全校验机制来传输文件,然后将ssh设置为免密码登录,岂不是非常简单。

对的,从这个角度,的确是很简单。至于ssh如何实现免密码登录,就不多说,网上相关的介绍非常多。这里,我需要说的是,ssh在生产环境下,服务器之间往往是不允许开通的,因为结合ssh可以实现服务器之间的跳转,用户就很方便实现控制这些机器。

所以,rsync+ssh的方式,往往可以在测试环境下,或者不对外提供网络访问权限的场景下,还是可以采用的。

这里,我要说的是,rsync以daemon的方式启动,通过配置文件设定账号密码,在客户端通过设置RSYNC_PASSWORD环境变量实现密码自动输入,就可以免去提示用户输入密码这个交互操作,方便Java等应用程序调用rsync指令实现文件同步。

首先说下我这里的场景:我有两个机器,一个server,一个client。在server端配置rsync以rsync daemon的方式启动。

server端的rsyncd.conf文件。这个文件在/etc/目录下,若没有这个文件,可以自己创建一个。

 uid = nginx
gid = nginx
pid file=/var/run/rsyncd.pid
log file=/var/log/rsyncd.log
secrets file = /etc/rsyncd.secrets  #这个文件,指定server端安全认证的密码文件,文件格式必须是 账号:密码这种键值对的形式。
auth users = nginx           #这个授权的用户名,是给rsync指定的用户名,可以和server当前的系统用户名相同,也可以不同。这里测试用的是和系统用户名相同的。 [cms]                  #这个cms模块名,可以随意取,但是在做同步指令操作的时候,cms就是目标机器server上的根目录,这里,设定的这个根目录是/u02/nginx/。
path = /u02/nginx/
read only = no

rsyncd.secrets文件:

 nginx:nginx@

然后,在测试的时候,若直接采用rsync客户端访问的方式,两个机器之间可能能正常执行,需要用户输入密码,但是若基于rsync daemon的方式执行的时候,也许就会遇到下面的问题:

 rsync: failed to connect to 10.130.202.136: Connection timed out ()
rsync error: error in socket IO (code ) at clientserver.c() [sender=3.0.]

这个说明rsync 服务器端以及客户端之间存在端口不通的问题,默认rsync tcp端口是873.确保端口通了后,在client端执行下面的指令:

 [tomcat@t0-tkonline-cms-web01 ~]$ rsync rsync.pass nginx@10.130.202.136::cms
Password:
@ERROR: auth failed on module cms
rsync error: error starting client-server protocol (code ) at main.c() [sender=3.0.]

哦,还是有错误,这里,我还没有设置RSYNC_PASSWORD环境变量,所以,需要手动输入密码。这里主要是说,为何还有错误,其实,这个错误,是因为server端的密码文件/etc/rsyncd.secrets的访问权限设置不对,必须设置为600.默认是下面的权限:

[nginx@t0-tkonline-cms-nginx01 html]$ ll /etc/rsyncd.secrets
-rw-r--r-- root root Jun : /etc/rsyncd.secrets

修改权限:

 [nginx@t0-tkonline-cms-nginx01 html]$ sudo chmod  /etc/rsyncd.secrets
[sudo] password for nginx:
[nginx@t0-tkonline-cms-nginx01 html]$
[nginx@t0-tkonline-cms-nginx01 html]$ ll /etc/rsyncd.secrets
-rw------- root root Jun : /etc/rsyncd.secrets

然后再测试一下:

 [tomcat@t0-tkonline-cms-web01 ~]$ rsync rsync.pass nginx@10.130.202.136::cms  #注意,这里cms前面是双冒号,指定是通过daemon的方式运行rsync,若是单个冒号,则说明是基本的rsync客户端指令操作方式
Password:
[tomcat@t0-tkonline-cms-web01 ~]$

嗯,这次可以了。最后说下,通过环境变量设置RSYNC_PASSWORD密码。

 [tomcat@t0-tkonline-cms-web01 ~]$ export RSYNC_PASSWORD=nginx@
[tomcat@t0-tkonline-cms-web01 ~]$
[tomcat@t0-tkonline-cms-web01 ~]$ rsync rsync.pass nginx@10.130.202.136::cms
[tomcat@t0-tkonline-cms-web01 ~]$

如何,这次没有提示要输入密码了,执行成功,在server机器上的cms对应的目录/u02/nginx/目录下,的确发现了rsync.pass文件。

就是这么简单的事情,需要的伙伴,可以作为一个参考吧!

rsync实现免密码操作的一种实现方式的更多相关文章

  1. Linux之sudo免密码操作

    使用普通用户只需特权命令是需要输入密码,然后在五分钟以内只需命令可以免密码,下面设置免密码操作 系统环境查看 切换至root用户 sudo -i #需要输入密码 修改sudoers文件 #增加一行 y ...

  2. python对mysql数据库操作的三种不同方式

    首先要说一下,在这个暑期如果没有什么特殊情况,我打算用python尝试写一个考试系统,希望能在下学期的python课程实际使用,并且尽量在此之前把用到的相关技术都以分篇博客的方式分享出来,有想要交流的 ...

  3. 技术分享 | 在MySQL对于批量更新操作的一种优化方式

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 作者:景云丽.卢浩.宋源栋 GreatSQL社区原创内容未经授权不得随意使用,转 ...

  4. 使用git客户端免密码进行拉取等相关操作

    前言 如果使用git客户端进行pull或push操作时,遇到有权限的项目总要输入用户名密码,真的是太麻烦了,因此需要稍作修改,然后就可以免密码操作啦! 方法: 进入C盘->用户->你的主机 ...

  5. 琐碎-到底要不要SSH免密码设置

    搭建了很多次hadoop2.2.0了,尝试过很多不同的启动方法.配置参数.位置,其中涉及到到底要不要配置SSH免密码登录的问题 先是搞清楚为什么需要SSH免密码登录 SSH免密码登录操作步骤: ... ...

  6. Linux A机器免密码SSH登录B机器

    一.问题 如上,A机器经常需远程操作B机器,传输文件到B机器,每次输入帐号密码过于繁琐,下文通过ssh公钥能解免密码操作问题. 二.解决 1.方案 SSH认证采用公钥与私钥认证方式. 2.步骤 1) ...

  7. ssh 免密码设置失败原因总结

    先复习一下设置ssh免密码操作的步骤: 进入主目录 cd 生成公钥 ssh-keygen -t rsa -P '' (注:最后是二个单引号,表示不设置密码) 然后分发公钥到目标机器 ssh-copy- ...

  8. rsync 远程同步 实时同步备份 两种免交互的方式实现实时备份

    rsync 远程同步: 一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH.rsync主机同步 作用:做数据备份 备份方式:      完全备份      增量备份 ...

  9. ssh keygen命令实现免密码通信(git库获取操作权限:开发人员添加到git库中,获取操作权限)

    先看两个机器实现免密码登陆通讯: 假设 A 为客户机器,B为目标机: 要达到的目的: A机器ssh登录B机器无需输入密码: 加密方式选 rsa|dsa均可以,默认dsa 做法: 1.登录A机器 2.s ...

随机推荐

  1. .csproj文件的配置 IIS可以调试

    <ProjectExtensions> <VisualStudio> <FlavorProperties GUID="{349c5851-65df-11da-9 ...

  2. 传智springMVC笔记

    springmvc 第一天 springmvc的基础知识 课程安排: 第一天:springmvc的基础知识 什么是springmvc? springmvc框架原理(掌握) 前端控制器.处理器映射器.处 ...

  3. win7 64 下安装ubuntu14.04

    win7下安装ubuntu方法: * 使用win7下的自带的分区工具给ubuntu留出磁盘空间:计算机 -> 右键菜单选择管理 -> 选择磁盘管理->选中最后的那个磁盘->右键 ...

  4. 初始C++ 模板元

    两篇比较好的博客,暂时还没不怎么理解! http://www.cnblogs.com/salomon/archive/2012/06/04/2534787.htmlhttp://www.cnblogs ...

  5. ci(转)

    1  从代码管理器签出源文件 2  修改代码 3  编译代码 4  遇到错误,转到2继续修改直到达到预期 5  运行单元测试,期望所有的测试绿色(通过) 6  单元测试出错,转入2 7  重构代码,按 ...

  6. Java-->简单的斗地主发牌流程

    package com.dragon.java.hwddz; import java.util.ArrayList; import java.util.HashMap; import java.uti ...

  7. 高效而轻松的sed命令

    sed(stream editor)是一款高效的流编辑器,它一次只处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的 ...

  8. href="#"与javascript:void(0)的区别

    共同点:都是一个空链接. 不同点:所以,#与javascript:void(0)的区别也很明显,#方法会跳转到页面的顶部,并且在页面URL后面会出现#,而javascript:void(0)方法不会, ...

  9. form的onsubmit事件--表单提交前的验证最佳实现方式

    今天遇到了一个问题,页面中include了很多的公共页面(都是没有form的),并且里面好多的地方都是自行提交的(页面中加入一个type=“submit”域,然后js中写入sumbit.click来执 ...

  10. psp0

    周活动总结表 姓名:苗堃                                                                                         ...