压在透明的玻璃上c-国产精品国产一级A片精品免费-国产精品视频网-成人黄网站18秘 免费看|www.tcsft.com

rsync + SSH增量備份文件

  http://troy.jdmz.net/rsync/index.html

  研究了這篇文章,里面寫得滿詳細(xì)的;我的這篇文章只是把我實際操作的過程記錄下來而已。內(nèi)容有誤或是您有更好的方案,歡迎您在下方的 comments 中給我建議 :)

  有兩臺機器,姑且一臺叫服務(wù)器,一臺叫備份機。要怎么樣才能每天或是定期地,把服務(wù)器的數(shù)據(jù)整個復(fù)制到備份機呢?這里就要用到 rsync (詳: 維基百科) 的強大功能了。

  rsync 在每次傳輸?shù)臅r候會先檢查遠(yuǎn)程的檔案清單,只傳輸遠(yuǎn)程有更新的檔案,所以只有第一次跑的時候會用掉比較多的時間,往后再執(zhí)行就很快了。它也支援 ssh 傳輸,所以安全基本上是可靠的。

  要怎么實作呢?

  首先我們先定義,服務(wù)器的 DN 叫作 server.51netshop.com.cn,(當(dāng)然我家沒有這臺機器= =);備份機的 DN 叫作 backup.51netshop.com.cn。我在兩邊的賬戶名稱都是 xiaochen。

  一、初試。

  首先兩邊都要裝 rsync 。 通常 FreeBSD 是在 /usr/ports/net/rsync,如果不是在這里的話,自己 whereis rsync 找找看吧。找到之后直接 cd 進去, make install clean  就行了。

  安裝完成當(dāng)然是要先執(zhí)行 rehash 才能立即更新指令列表。接著,以 xiaochen 登入到 backup.51netshop.com.cn,寫一支小小的 Bourne Shell 來試試看 rsync 能不能運作,就放在 /home/xiaochen/rsync.sh 好了(記得要 chmod +x 喔):

  [檔案開始,不包含此一行]

  #!/bin/sh

  #!/bin/sh

  RSYNC=/usr/local/bin/rsync

  SSH=/usr/bin/ssh

  RUSER=xiaochen

  RHOST=server.51netshop.com.cn

  RPATH=/home/xiaochen/test

  LPATH=/mnt/database/fileserver/mirror.51netshop.com.cn

  $RSYNC -e "$SSH" -avzP –delete $RUSER@$RHOST:$RPATH $LPATH

  [檔案結(jié)束,不包含此一行]

  其變量解說如下:

  * RSYNC 是 rsync 執(zhí)行文件所在的路徑;每臺機器不見得一樣,你得用 whereis rsync 找到它。

  * SSH 是 ssh 執(zhí)行文件所在的路徑,當(dāng)然你也要用 whereis ssh 來找

  * RUSER 是我在 server.yorkxin.org 的賬戶名稱

  * RHOST 是伺服機的 Domain Name 或是 IP

  * RPATH 是伺服機中『欲備份到備料機的路徑』。在 rsync 的過程中會把整個子目錄都丟過來,所以你只要指定最頂?shù)穆窂骄托辛恕?/p>

  * LPATH 指的是我在 backup.yorkxin.org,『欲擺放備料檔案的路徑』。

  a:保持文件的所有屬性

  v:執(zhí)行時顯示信息

  z:同步時壓縮文件

  p:顯示執(zhí)行過程

  最后一行寫得很惡心,其實就是 rsync 的指令加參數(shù),用法是

  rsync [參數(shù)] 遠(yuǎn)程使用者@遠(yuǎn)程機器:遠(yuǎn)程路徑 本機路徑

  參數(shù)說明如下:

  * -e 后面跟一坨字符串,表示我們要用不一樣的方法來登入伺服機,例如 ssh 或是 rsh。

  * -a 是『封存』(archive);老實說我不知道這是什么意思 Orz

  * -z 是要 rsync 在傳輸?shù)倪^程中壓縮,節(jié)省時間

  * –delete (兩個 dash 喔) 是要 rsync 『遇到遠(yuǎn)程(伺服機)已刪掉的檔案,就把本機(備料機)的相同檔案也刪掉』。這對于 snapshot 倒是頗方便的。

  存盤之后,chmod +x ,先跑一次試試看(當(dāng)然我要先在家目錄 mkdir );這第一次執(zhí)行會把服務(wù)器(遠(yuǎn)程) 指定路徑的所有檔案都復(fù)制到備份機(本機),我們在這里先跑一次,接下來要試也比較省時間。

  二、免打密碼的 SSH 聯(lián)機

  既然是開工作排程給它定時備份,總不能說每次都要人工輸入密碼吧。還好 ssh 提供了密鑰認(rèn)證的方式,接下來我要做一對認(rèn)證密鑰,分別放在備料機和伺服機,以便于雙方在透過 ssh 做 rsync 備份的時候,可以不必人工輸入密碼。

  1. 生 SSH Key Pair

  在備料機 backup.51netshop.com.cn (本機)輸入以下指令:[兩行請接在一起]

  ssh-keygen -t dsa -b 1024 -f /home/xiaochen/.ssh/

  當(dāng)然最后一個參數(shù) (-f ,指定生成檔案),你可以自己指定。

  會出現(xiàn)以下的訊息,這里沒什么要輸入的文字,只是你要按兩次 Enter:

  Generating public/private dsa key pair.

  Enter passphrase (empty for no passphrase): [直接按enter]

  Enter same passphrase again: [直接按enter]

  Your identification has been saved in /home/xiaochen/.ssh/id_dsa.

  Your public key has been saved in /home/xiaochen/.ssh/id_dsa.key.pub.

  The key fingerprint is:

  96:0a:51:79:c2:a5:f3:6d:36:81:fb:31:08:16:f7:b7 xiaochen@backup.51netshop.com.cn

  完成后你會看到兩個檔案:

  * /home/xiaochen/.ssh/id_dsa 這是私鑰 (私鑰,要小心不能流出)

  * /home/xiaochen/.ssh/id_dsa.pub 這是公鑰 (公鑰)

  2. 讓伺服機收下公鑰

  再來要把公鑰 (.id_dsa.pub) 放到目標(biāo)服務(wù)。你可以用 FTP 傳,不過既然你已經(jīng)在工作站了,那就用 SSH 的 SCP 吧,指令如下:[兩行請接在一起]

  scp /home/xiaochen/.ssh/id_dsa.pub xiaochen@server.51netshop.com.cn:~/

  按下 Enter 后會要求輸入密碼,以便 scp 以 ssh 登入伺服機 (server.51netshop.com.cn)。

  完成之后,就可以到伺服機 (server.51netshop.com.cn) 操作了。我以 xiaochen 身份登入到 server.51netshop.com.cn。(所以以下的動作都是在 server.51netshop.com.cn 這臺伺服機里,以 xiaochen 身份操作)

  1) 如果沒有 ~/.ssh/ 這個目錄的話,自己用 mkdir 生一個 .ssh/ 文件夾,在家目錄里面,并且 chmod 成 700。(注意文件夾名稱前面要有一個 `.‘)

  2) 把剛剛用 scp 丟過來的 .id_dsa.pub 移動到 ~/.ssh/ 里面:

  mv .id_dsa.pub ~/.ssh/authorized_keys

  做到這里,其實備料機 (backup.51netshop.com.cn) 就可以透過免打密碼的 SSH 認(rèn)證,直接 ssh 聯(lián)機到伺服機 (server.51netshop.com.cn) 了。但是這種聯(lián)機會『允許所有來源、允許所有指令』,所以現(xiàn)在要改一下。

  三、限制密鑰認(rèn)證 SSH 聯(lián)機的來源和權(quán)力

  以下的動作也都是在 server.51netshop.com.cn 進行

  1. 編輯 ~/.ssh/authorized_keys 這個檔案,在第一個字 (ssh-dss) 前面加入

  from="backup.51netshop.com.cn",command="/home/xiaochen/validate-rsync"

  記得這一坨字和 “ssh-dss” 這個單字之間要空一格。from 就是 backup.51netshop.com.cn 的 DN 或 IP, command 則是我放驗證 SSH Command 的腳本文件的位置。

  2. 接著要做驗證腳本文件,這個例子中就是 /home/xiaochen/validate-rsync 這個檔案,記得存盤后要 chmod +x:

  [檔案開始,不包含此一行]

  #!/bin/sh

  case "$SSH_ORIGINAL_COMMAND" in

  *&*)

  echo "Rejected"

  ;;

  *(*)

  echo "Rejected"

  ;;

  *{*)

  echo "Rejected"

  ;;

  *;*)

  echo "Rejected"

  ;;

  *<*)

  echo "Rejected"

  ;;

  *`*)

  echo "Rejected"

  ;;

  *|*)

  echo "Rejected"

  ;;

  rsync –server*)

  $SSH_ORIGINAL_COMMAND

  ;;

  *)

  echo "Rejected"

  ;;

  esac

  [檔案開始,不包含此一行]

  要注意,雖然現(xiàn)在 ssh 聯(lián)機認(rèn)證已經(jīng)限制了可用的指令,但只要拿到私鑰,一樣可以從 backup 這臺機器登入到 server ,可以復(fù)制所有可存取的檔案,所以私鑰要小心不能流出去。

  四、加入密鑰信息

  現(xiàn)在回到 backup.51netshop.com.cn 。編輯剛剛在步驟 一、 里面做的 /home/xiaochen/rsync.sh,因為現(xiàn)在要加入密鑰信息。大概改成這樣:

  [檔案開始,不包含此一行]

  #!/bin/sh

  RSYNC=/usr/local/bin/rsync

  SSH=/usr/bin/ssh

  KEY=/home/xiaochen/id_dsa.key   # 私鑰路徑

  #[加入上面這一行,當(dāng)然你要改成你的私鑰路徑]

  RUSER=xiaochen

  RHOST=192.168.10.235

  RPATH=/home/xiaochen/test

  LPATH=/mnt/database/fileserver/mirror.51netshop.com.cn

  $RSYNC -e "$SSH -i $KEY" -avzP –delete $RUSER@$RHOST:$RPATH $LPATH

  #  最后一行的『指令』要加入 -i $KEY 這個參數(shù),在  $SSH 的后面,中間空一格。

  [檔案結(jié)束,不包含此一行]

  然后執(zhí)行一次,看看有沒有正常。

  如果一切正常的話,其實你可以把 rsync.sh 最后一行指令里面的 -avz 參數(shù)改成 -az ,畢竟 -v 是我們要『邊抓邊看進度』的時候在用的。

  五、加入工作排程

  在 backup.51netshop.com.cn 以 xiaochen 身份執(zhí)行 crontab -e,加入

  0 5 * * * /home/xiaochen/rsync.sh

  這是在每日 05:00 執(zhí)行一次,當(dāng)然你可以改成別的時間。

    文章來源:http://chenshengang.blog.51cto.com/4399161/1609060

上一篇:安卓防火墻 PS DroidWall

下一篇:Hyper-V Server網(wǎng)絡(luò)高級功能特性介紹