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

 

就是這么簡單的事情,需要的伙伴,可以作為一個參考吧!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM