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文件。
就是這麼簡單的事情,須要的夥伴,能夠做爲一個參考吧!