2010年12月16日 星期四

rsync + ssh on Ubuntu 10.04 LTS

rsync 以前就知道了,只是一直沒試過,以為它是 不安全的檔案傳輸方式,最近才知道它可以配合ssh做遠端的安全資料備援, 從 rsync原廠網站得知它的特色如下:
  1. 可更新整個目錄結構及檔案系統
  2. 可保留soft link、hard link、檔案擁有者、檔案權限、設備(? 不瞭)和檔案更新時間
  3. 安裝時不需要特殊的權限
  4. 多檔案傳輸效率高
  5. 可配合rsh、ssh或直接的sockets來傳輸資料
  6. 支援anonymous(匿名)方式傳輸,做site mirror很方便

    root@ HostA(欲備份資料) ---->  root@ ServerB(rsync server, 存放備份)
              192.168.1.5                                  192.168.1.100


    0) ssh前置動作:(ssh免密碼登入)
      為了日後備份自動化,所以我要先做 HostA上的root 利用ssh 免密碼登入 ServerB,
    產生 DSA 金鑰一對 (Public key & Private key)
    root@HostA# ssh-keygen -t dsa
    • 預設會存在家目錄下的目錄「.ssh」
    • 如果有需要的話, passphrase要設定密碼,我是沒設直接按 Enter

    將 HostA's root的Pub key放到 ServerB's root 家目錄的「.ssh」下,
    root@HostA# scp ~/.ssh/id_dsa.pub 192.168.1.100:/root/.ssh/.

    (First time)還是需要密碼登入至 ServerB,
    root@HostA# ssh root@192.168.1.100

    將HostA's root目錄下的public key轉存為系統預設處理放置公鑰的檔案「authorized_keys」,
    root@ServerB# cat /root/.ssh/id_dsa.pub >> /root/.ssh/authorized_keys

    Logout ServerB,重新登入, 金鑰符合的話,此時已不需要密碼認證了,
    root@HostA# ssh root@192.168.1.100
    ==========至此前置工作完成!!

    1) 確認安裝情況: (如果沒安裝的話,就執行apt-get install rsync)
    # dpkg -l rsync
    ||/ 名稱         版本         簡介
    ====================================================
    ii  rsync          3.0.7-1ubuntu1 fast remote file copy program (like rcp)

    2) Server端設定: (存放備份資料的主機)
    可以使用anonymous 或是 module設定(Ref: /etc/rsyncd.conf),這
    root@ServerB# vi /etc/default/rsync
    RSYNC_ENABLE=true
      server端要改 faluse 為 true

    啟動 rsync server服務,使設定生效:
    root@ServerB# service rsync restart

    測試一下 rsync 服務的Port有沒有問題:(rsync default port: Port 873)
    root@ClientA# telnet 192.168.1.100 873

    3) Client端設定:
    決定要備份的目錄, 例如: /var/backup/2010-12-12_21.03.56.908806.x32.ful/ ,

    4) rsync備份指令執行:  (Ref: rsync) 這動作稱: Push via rsync daemon, 也就是clientA的 rsync server不用啟動也ok, 它另有不同方向的執行動作, 請使用「man rsync」
    root@clientA# rsync -avSH --delete -e ssh /var/backup/2010-12-12_21.03.56.908806.x32.ful/ root@192.168.1.15:/var/backups/
    .......(執行過程如下)















    參數說明:

    -a, archive mode; equals -rlptgoD
    -v, increase verbosity
    -S, handle sparse files efficiently
    -H, preserve hard links
    -l, copy symlinks as symlinks
    -r, recurse into directories
    -p, preserve permissions
    -t, preserve modification times
    -g, preserve group
    -o, preserve owner (super-user only)
    -D, preserve device files (super-user only)
    --delete, delete extraneous files from dest dirs
    -e, specify the remote shell to use
    • 只有第一次備份的動作會比較久(∵是 full backup), 之後備份執行時,rsync就會比較檔案的差異性,備份新增的部份(incremental backup),若clinet端的檔案有刪減的話,執行rsync時也會同步server端的備份目錄清況.
    • Clinet與 Server的 rsync使用者目錄權限要注意, 例: Client端 user要對備份過去的目錄有read的權利 & Server端的登入user也要對放置備份的目錄有write的權利,我是為了方便起見才兩邊都用root,但要注意某些rsync參數只有root才能使用.
    • 可以寫一個script去專門做 rsync重要資料 ,並放入crontab內讓系統排程執行.
    Done!!

    [Linux]使用rsync+ssh自動同步網站檔案

    沒有留言:

    張貼留言