zoukankan      html  css  js  c++  java
  • rsync实现免密码操作的一种实现方式

    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/目录下,若没有这个文件,可以自己创建一个。

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

    rsyncd.secrets文件:

    1 nginx:nginx@016

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

    1 rsync: failed to connect to 10.130.202.136: Connection timed out (110)
    2 rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]

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

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

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

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

    修改权限:

    1 [nginx@t0-tkonline-cms-nginx01 html]$ sudo chmod 600 /etc/rsyncd.secrets
    2 [sudo] password for nginx:
    3 [nginx@t0-tkonline-cms-nginx01 html]$
    4 [nginx@t0-tkonline-cms-nginx01 html]$ ll /etc/rsyncd.secrets
    5 -rw------- 1 root root 16 Jun 29 17:05 /etc/rsyncd.secrets

    然后再测试一下:

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

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

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

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

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

  • 相关阅读:
    SpringMVC 返回 json 字符串中文乱码
    两个HTML页面之间传值
    NOIP2018 保卫王国
    Arch Linux使用cisco anyconnect
    CSP模拟赛 巨神兵
    计蒜客The Fake Fake Friends
    Manjaro安装,配置,美化指南
    [国家集训队] Crash 的文明世界
    ZJOI2011 营救皮卡丘
    CF1198E Rectangle Painting 2
  • 原文地址:https://www.cnblogs.com/shihuc/p/5628893.html
Copyright © 2011-2022 走看看