rsync实现免密码操作的一种实现方式

时间:2021-05-21 02:56:17

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. 使用git客户端免密码进行拉取等相关操作

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

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

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

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

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

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

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

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

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

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

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

  9. Linux系列:Ubuntu/fedora实用小技巧—禁止自动锁屏、设置免密码自动登录、免密码执行sudo操作

    首先声明:该文虽以Ubuntu 13.04为例,同样适用于Fedora 17(已测试),但在较低版本的Ubuntu下可能有所差异,具体看后面的注意事项. 技巧目录: 解决Ubuntu下每隔几分钟自动锁 ...

随机推荐

  1. WebService的两种方式Soap和Rest比较

    我的读后感:由于第一次接触WebService,对于很多概念不太理解,尤其是看到各个OpenAPI的不同提供方式时,更加疑惑.如google map api采用了AJAX方式,通过javascript ...

  2. .Net“/”应用程序中的服务器错误 超过了最大请求长度 错误解决办法

    错误如下: 错误提示: 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: System.Web.HttpE ...

  3. Java JDBC高级特性

    1.JDBC批处理 实际开发中需要向数据库发送多条SQL语句,这时,如果逐条执行SQL语句,效率会很低,因此可以使用JDBC提供的批处理机制.Statement和PreparedStatemen都实现 ...

  4. poj 1328 Radar Installation(nyoj 287 Radar):贪心

    点击打开链接 Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 43490   Accep ...

  5. asp.net core 系列 8 Razor框架路由(下)

    三.页面路由操作约定 接着上篇讲asp.net core 系列 7 Razor框架路由.在上篇继续第三节 "页面路由操作约定" 的最后一小节 AddPageRoute . 3.3. ...

  6. 为什么要学习 Spring Boot?

    我们知道,从 2002 年开始,Spring 一直在飞速的发展,如今已经成为了在Java EE(Java Enterprise Edition)开发中真正意义上的标准,但是随着技术的发展,Java E ...

  7. python request 接口自动化设计

    设计思路: * 数据驱动 * 测试结果以邮件形式发送 * 保留测试过程的用例和请求结果到日志,方便查问题 设计如下: * bin * casehandler 读取txt或者xls文件中的用例,一个文件 ...

  8. glob.glob()、os.path.split()函数、global和nonlocal关键字

    1. glob.glob() glob模块是Python最简单的模块之一, 内容非常少, 用它可以查找符合特定规则的文件路径名, 查找文件时只会用到三个匹配符: * :匹配0个或多个字符 ? : 匹配 ...

  9. Spring Boot干货系列:(二)配置文件解析

    Spring Boot干货系列:(二)配置文件解析 2017-02-28 嘟嘟MD 嘟爷java超神学堂   前言 上一篇介绍了Spring Boot的入门,知道了Spring Boot使用“习惯优于 ...

  10. linux 异常

    1. NoRouteToHostException异常问题的原因及解决 (转自:http://performtest163.blog.163.com/blog/static/1400769642011 ...