Posted on

[Centos]用rsync+ssh+crontab做主機自動同步備份

製作不需詢問密碼就可以登入的ssh用戶

接下來我們要讓client透過ssh登入server時不再詢問密碼,這樣當我們用rsync透過ssh將資料同步備份到client時,就能全自動進行,不會卡在詢問密碼那裡

首先在client端製作公鑰和私鑰

$ ssh-keygen -t rsa

這中間會問你鑰匙要放在哪個目錄,還有passphrase,按三次Enter採用預設值

Generating public/private rsa key pair.
Enter file in which to save the key (/home/davidpai/.ssh/id_rsa):
Created directory ‘/home/davidpai/.ssh’.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/davidpai/.ssh/id_rsa.
Your public key has been saved in /home/davidpai/.ssh/id_rsa.pub.

最後鑰匙會產生在家目錄的.ssh目錄下,id_rsa.pub是公鑰,id_rsa就是私鑰,把公鑰傳到server上,然後到server上,將公鑰加入authorized_keys
authorised_keys放在家目錄的.ssh目錄下,如果還沒有這個目錄,手動把它建立起來

$ mkdir .ssh

第一次還沒有authorized_keys,直接用cat把id_rsa.pub的內容加進去

$ cat id_rsa.pub >> authorized_keys

以後要加其他的公鑰,也是用cat附加到該檔案後面就可以

回到client端,試試看是否不需要詢問密碼就能登入

$ ssh xxx@xxx.xxx.xxx

3. rsync同步備份

再來我們就可以用rsync來同步備份server端的資料

在client端輸入以下指令

$ rsync -av –delete -e ssh xxx@xxx.xxx.xxx:/var/www /home/backup

這樣就是把遠端server主機上的/var/www目錄全部資料同步備份到client端的/home/backup目錄裡,之後server端有任何異動,只會同步備份異動的部份,這就是所謂的差異備份。

那個-e參數後面要空一個寫ssh,表示傳輸過程我們要使用ssh通道加密。

那個–delete參數的意思是說,server端檔案如果刪除,client端也會刪除,如果不加這個參數,client端檔案就會留著不刪除,這個參數加不加可以自己斟酌。

4. 設定cron讓備份自動執行

最後我們想要讓server端的資料可以定時自動同步備份到client端,這就輪到crontab上場了
在client端把上述指令寫到crontab裡

$ crontab -e
2 4 * * * rsync -av –delete -e ssh xxx@xxx.xxx.xxx:/var/www /home/backup

這樣就是在每天凌晨04:02自動同步備份遠端server的/var/www目錄到/home/backup