首頁  >  文章  >  後端開發  >  記一次rsync增量同步遠端伺服器文件

記一次rsync增量同步遠端伺服器文件

WBOY
WBOY原創
2016-08-08 09:24:37859瀏覽

rsync remote shell 增量方式同步資料

rsync同步檔案有兩種方式,一種是daemon的方式(rsync daemon)另一種方式是透過遠端shell方式(rsync remote shell)。

兩種方式的差別

daemon方式,這種方式透過TCP方式連接遠端rsync daemon,需要使用設定文件,並啟用daemon進程。

<code>rsync [OPTION] user@host::src dest
rsync [OPTION] src user@host::dest</code>

remote shell方式,這種方式不需要使用設定文件,也不需要daemon進程。

<code>rsync [OPTION] user@host:src dest
rsync [OPTION] src user@host:dest</code>

daemon方式太麻煩了,好要去設定設定檔和daemon進程,所以我選用了remote shell方式,就像下面這樣去同步:

<code>  rsync -avr --delete yanruitao@123.123.123.123:/export/test/htdocs/files/ /export/test/htdocs/files/</code>

其中參數avr --delete分別表示

<code>-a 归档(archive)模式,以递归方式传输文件,并保持文件属性
-v 输出同步的详细信息(verbose)
-r 对子目录进行递归模式处理(recursive)
--delete 删除源(SRC)中没有目标(DST)中有的文件</code>

如果一切正常的話,當運行上面的同步命令,會提示輸入遠端機器yanruitao用戶的密碼(第一次的話會提示是否建立關係(好像是,具體忘了),直接回車就行),執行完之後會按照規則去同步。

但有個問題,我要新增一個crontab任務,在每天2點鐘去增量同步一次,這時候我不能去輸密碼,這時候就得在兩台機器上建立信任關係

兩台機器之間建立信任關係

在建立信任關係之前先看看基於公鑰、私鑰的加密和認證

私鑰簽章過程

下面這張圖是偷來的,哈哈,用這張圖理解認證過程再適合不過了:

<code>消息-->[私钥]-->签名-->[公钥]-->认证
私钥数字签名,公钥验证</code>
  1. Alice產生公鑰和私鑰,並將公鑰發送給Bob。
  2. Alice用自己的私鑰產生簽名,也就是加密。
  3. Alice將簽署的訊息發送給Bob。
  4. Bob用Alice的公鑰解密,驗證簽章真偽。
    記一次rsync增量同步遠端伺服器文件
公鑰加密過程

下面這張圖也是盜來的(有圖就是好理解),以下是Alice透過對稱金鑰技術發送訊息給Bob:

<code>消息-->[公钥]-->签名后的消息-->私钥-->解密后的消息
公钥加密,私钥解密</code>
  1. Bob產生自己的公鑰和私鑰,並將公鑰發送給Alice。
  2. Alice用Bob的公鑰將資訊加密。
  3. Alice將加密後的訊息傳送給Bob。
  4. Bob用他的私鑰進行解密,得到Alice傳送的訊息。
    記一次rsync增量同步遠端伺服器文件

建立主機之間的信任關係

了解了上面公鑰和私鑰的知識,現在我們來在兩個主機之間建立信任關係,

,要在101上對100建立信任關係(也就是100登入101的時候不需要輸入密碼),這個時候就用到了私鑰簽署的過程:
在yanruitao192.168.1.100的家目錄下產生公鑰和私鑰(已經有的可以忽略)
<code>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</code>
在yanruitao192.168.1.101的家目錄下對yanruitao192.168.1.100建立信任關係
<code>#将刚才传送的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建立了信任关系</code>
設定crontab
<code>0 */2 * * * rsync yanruitao@192.168.1.101:/export/wwwroot/hotdocs/files/ /export/wwwroot/hotdocs/files/
#设置完成,每天02:00分会执行一次增量同步</code>
遇到的問題

當然了,自己實際操作的時候可能遇到問題,我在弄的時候,兩台機器的用戶名是不同的,一個yanruitao一個mywife(哈哈,勿笑),在yanruitao對mywife簡歷信任關係,這個時候就需要重新在mywife家目錄下操作上面的建立信任關係步驟。還有一個問題就是,在mywife機器上的/export/wwwroot/htdocs/files/資料夾的擁有者一定要是mywife:

<code>#修改文件夹所有者为mywife
sudo chown mywife:users /export/wwwroot/htdocs/files/</code>

不然可能會報錯(具體錯誤我忘了,在公司碰到的),雖然好像不影響同步,但是$?會返回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()所有,未經作者本人同意禁止任何形式的轉載,轉載文章之後必須在文章頁面明顯位置給出作者和原文連接,否則保留追究法律責任的權利。

以上就介紹了記一次rsync增量同步遠端伺服器文件,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:nginx快取配置下一篇:nginx快取配置