rsync remote shell 增量方式同步數據
rsync同步文件有兩種方式,一種是daemon的方式(rsync daemon)另一種方式是通過遠程shell方式(rsync remote shell)。
兩種方式的區別
daemon方式,這種方式通過TCP方式連接遠程rsync daemon,需要使用配置文件,並啟用daemon進程。
rsync [OPTION] user@host::src dest
rsync [OPTION] src user@host::dest
remote shell方式,這種方式不需要使用配置文件,也不需要daemon進程。
rsync [OPTION] user@host:src dest
rsync [OPTION] src user@host:dest
daemon方式太麻煩了,好要去設置配置文件和daemon進程,因此我選用了remote shell方式,就像下面這樣去同步:
rsync -avr --delete yanruitao@123.123.123.123:/export/test/htdocs/files/ /export/test/htdocs/files/
其中參數avr --delete分別表示
-a 歸檔(archive)模式,以遞歸方式傳輸文件,並保持文件屬性
-v 輸出同步的詳細信息(verbose)
-r 對子目錄進行遞歸模式處理(recursive)
--delete 刪除源(SRC)中沒有目標(DST)中有的文件
如果一切正常的話,當運行上面的同步命令,會提示輸入遠程機器yanruitao用戶的密碼(第一次的話會提示是否建立關系(好像是,具體忘了),直接回車就行),執行完之后會按照規則去同步。
但是有個問題,我要添加一個crontab任務,在每天2點鍾去增量同步一次,這個時候我不能去輸密碼,這個時候就得在兩台機器上建立信任關系
兩台機器之間建立信任關系
在建立信任關系之前先看看基於公鑰、私鑰的加密和認證
私鑰簽名過程
下面這張圖是盜來的,哈哈,用這張圖理解認證過程再合適不過了:
消息-->[私鑰]-->簽名-->[公鑰]-->認證
私鑰數字簽名,公鑰驗證
- Alice生成公鑰和私鑰,並將公鑰發送給Bob。
- Alice用自己的私鑰生成簽名,也就是加密。
- Alice將簽名的信息發送給Bob。
- Bob用Alice的公鑰進行解密,驗證簽名真偽。
公鑰加密過程
下面這張圖也是盜來的(有圖就是好理解),下面是Alice通過對稱密鑰技術發送信息給Bob:
消息-->[公鑰]-->簽名后的消息-->私鑰-->解密后的消息
公鑰加密,私鑰解密
- Bob生成自己的公鑰和私鑰,並將公鑰發送給Alice。
- Alice用Bob的公鑰對信息進行加密。
- Alice將加密后的信息發送給Bob。
- Bob用他的私鑰進行解密,得到Alice發送的信息。
建立主機之間的信任關系
了解了上面公鑰和私鑰的知識,現在我們來在兩個主機之間建立信任關系,假設有兩台機器yanruitao@192.168.1.100,yanruitao@192.168.1.101,要在101上對100建立信任關系(也就是100登錄101的時候不需要輸入密碼),這個時候就用到了私鑰簽名的過程:
在yanruitao192.168.1.100的家目錄下生成公鑰和私鑰(已經有的可以忽略)
ssh-keygen -t rsa
#執行完之后會在家目錄下的.ssh文件夾下生成id_rsa、id_rsa.pub兩個文件,后者是公鑰。
scp .ssh/id_rsa.pub yanruitao@192.168.1.101:/home/yanruitao/
#scp同樣是通過remote shell的方式傳送文件,回車之后會提示輸入密碼,此時
#還未建立信任關系,因此需要輸入密碼。確認100的公鑰發送給101
在yanruitao192.168.1.101的家目錄下對yanruitao192.168.1.100建立信任關系
#將剛才傳送的100機器的公鑰寫入101yanruitao及目錄下的.ssh/authorized_keys文件
cat id_rsa.pub >> .ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
#至此就在yanruitao@192.168.1.101上對192.168.1.100建立了信任關系
設置crontab
0 */2 * * * rsync yanruitao@192.168.1.101:/export/wwwroot/hotdocs/files/ /export/wwwroot/hotdocs/files/
#設置完成,每天02:00分會執行一次增量同步
遇到的問題
當然了,自己實際操作的時候可能遇到問題,我在弄的時候,兩台機器的用戶名是不同的,一個yanruitao一個mywife(哈哈,勿笑),在yanruitao對mywife簡歷信任關系,這個時候就需要重新在mywife家目錄下操作上面的建立信任關系步驟。還有一個問題就是,在mywife機器上的/export/wwwroot/htdocs/files/文件夾的所有者一定要是mywife:
#修改文件夾所有者為mywife
sudo chown mywife:users /export/wwwroot/htdocs/files/
不然可能會報錯(具體錯誤我忘了,在公司碰到的),雖然好像不影響同步,但是$?會返回23,影響下面的操作,這里也要留意下。
參考文章
http://www.williamlong.info/archives/837.html
http://www.cnblogs.com/ymy124/archive/2012/04/04/2432432.html
http://www.zhihu.com/question/25912483
本文版權歸作者iforever(luluyrt@163.com)所有,未經作者本人同意禁止任何形式的轉載,轉載文章之后必須在文章頁面明顯位置給出作者和原文連接,否則保留追究法律責任的權利。