rsync實現免密碼操做的一種實現方式

rsync實現免密碼操做的一種實現方式

Posted on 2016-06-30 09:23 shihuc 閱讀(10030) 評論(0) 編輯 收藏html

rsync是遠程文件同步協議,在linux系統下,操做服務器之間的文件同步,是很是方便高效的。linux

可是,簡單的rsync操做,每每須要和用戶交互,須要用戶輸入密碼,這個對於結合應用系統使用,好比Java調用linux指令實現同步的話,就不是很方便。nginx

 

固然,也許讀者會說,這個免密碼操做還不簡單,rsync+ssh,利用ssh的安全校驗機制來傳輸文件,而後將ssh設置爲免密碼登陸,豈不是很是簡單。web

對的,從這個角度,的確是很簡單。至於ssh如何實現免密碼登陸,就很少說,網上相關的介紹很是多。這裏,我須要說的是,ssh在生產環境下,服務器之間每每是不容許開通的,由於結合ssh能夠實現服務器之間的跳轉,用戶就很方便實現控制這些機器。tomcat

因此,rsync+ssh的方式,每每能夠在測試環境下,或者不對外提供網絡訪問權限的場景下,仍是能夠採用的。安全

 

這裏,我要說的是,rsync以daemon的方式啓動,經過配置文件設定帳號密碼,在客戶端經過設置RSYNC_PASSWORD環境變量實現密碼自動輸入,就能夠免去提示用戶輸入密碼這個交互操做,方便Java等應用程序調用rsync指令實現文件同步。服務器

首先說下我這裏的場景:我有兩個機器,一個server,一個client。在server端配置rsync以rsync daemon的方式啓動。網絡

server端的rsyncd.conf文件。這個文件在/etc/目錄下,若沒有這個文件,能夠本身建立一個。ssh

複製代碼

 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文件:socket

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文件。

 

就是這麼簡單的事情,須要的夥伴,能夠做爲一個參考吧!

相關文章
相關標籤/搜索