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. Magento速度优化

    一.Magento Compiler可以提高 25% 到 50% 速度 Magento的性能一直是大家比较关心的焦点,现在Magento最新的版本 1.3.2.2 增加了 Magento Compil ...

  2. windows服务部署与卸载

    同事问到windows service的东东,现在整理一下,用c#如何创建一个windows service,以及如何调试.部署.卸载. 一.创建windows service 1. 打开VS2008 ...

  3. chromium 安装 pepper flash player

    打开终端,输入以下命令即可安装: 1. sudo apt-get update 2. sudo apt-get install chromium-browser 3. sudo apt-get ins ...

  4. Open vSwitch安装及配置

    一. Open vSwitch简介 1.1概述 Open vSwitch是一个高质量的.多层虚拟交换机,使用开源Apache 2.0许可协议,由Nicira Networks开发,主要实现代码为可移植 ...

  5. USB相关的网络资料

    相关资源连接: USB官网:http://www.usb.org/home <USB in a NutShell>: http://www.beyondlogic.org/usbnutsh ...

  6. hadoop问题锦集(一):mapreduce不能在集群中运行

    问题详细: 搭建类hadoop的集群集群环境,查看hadoop dfsadmin -report 也有datanode节点.在master:50070上也有. 然而在eclipse环境上运行mapre ...

  7. Web应用开发工具及语言需要具备的功能探索

    1 前言 最近一个多月在做Web项目,用到的技术有(也不算泄漏公司机密吧): 后台:Struts 2(with JSP/FreeMarker).Spring.Hibernate.MySQL.Web S ...

  8. ABAP DEMO

    sap Program DEMO 介绍 Program Description BALVBT01 Example SAP program for displying multiple ALV repo ...

  9. Codeforces Round #365 (Div. 2) A 水

    A. Mishka and Game time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  10. C++ Primer : 第十二章 : 动态内存之动态数组

    动态数组的分配和释放 new和数组 C++语言和标准库提供了一次分配一个对象数组的方法,定义了另一种new表达式语法.我们需要在类型名后跟一对方括号,在其中指明要分配的对象的数目. int* arr ...