天天看點

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

但是之前的備份功能隻是備份到Gitlab服務運作的那台伺服器上,如果哪一天那台伺服器的磁盤損壞了的話,資料無法取出,那麼對于公司來說是一匹無法想象的損失,因為

代碼是公司的重要資産,需要以防萬一。

是以我們得做好代碼的備份工作,是以除了每天在Gitlab那台伺服器上自動備份之外,還需要将每天的備份檔案copy到另外一台檔案備份伺服器上,已達到雙保險的要求。

遠端手動備份資料費時費力且不及時。最好的方法就是通過腳本實作遠端自動互備。但遠端無論是通過SSH登陸,還是通過scp拷貝檔案都需要輸入密碼。為了克服這個問題,首先需要實作不需要密碼的SSH登陸,這樣就可以使用 rsync,scp,rexec等指令來做的遠端備份了。

前提:本地伺服器:A, 遠端伺服器:B

假設A,B兩伺服器,現在需要在A機上用root登陸B機,而不需要輸入密碼。那我們可按照下面的步驟來做:

在本地伺服器A上生成rsa證書,運作指令:

完整運作如下所示:

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

1、生成的過程中提示輸入密鑰對儲存位置,直接回車,接受預設值就行了。

2、因為之前已經有/root/.ssh/id_rsa 檔案存在,是以提示你是否覆寫,輸入y表示覆寫

3、接着會提示輸入一個密碼,直接回車,讓它空着。當然,也可以輸入一個密碼。

4、接着輸入确認密碼,輸入完之後,回車密鑰對就生成完了。

在/root/.ssh下生成id_rsa 和 id_rsa.pub 兩個檔案, 其中公共密鑰儲存在 /root/.ssh/id_rsa.pub,私有密鑰儲存在/root/.ssh/id_rsa。
Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

然後在/root/.ssh下複制備份一份id_rsa.pub 命名為 id_rsa.pub.A,以便拷貝到遠端伺服器B。

執行cp指令複制

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

使用scp指令進行遠端複制,将A機生成的id_rsa.pub.A拷貝到遠端伺服器B的/root/.ssh目錄下

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

這裡使用scp指令需要輸入密碼,當我們把下面的第三步執行完畢之後,以後本地伺服器A使用scp指令複制檔案到遠端伺服器B的話,就不需要再次輸入密碼。

當第二步将伺服器A上的id_rsa.pub.A 檔案copy到了伺服器B的目錄/root/.ssh下之後截圖如下:

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

現在我們在 B 的/root/.ssh下建立authorized_keys檔案,使用如下指令

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

通過 cat 指令 把id_rsa.pub.A 追寫到 authorized_keys 檔案中,指令依次如下:

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

執行如下指令,修改authorized_keys檔案的權限

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本
authorized_keys檔案的權限很重要,如果設定為777,那麼登入的時候,還是需要提供密碼的。

測試伺服器A使用scp指令複制檔案到伺服器B是否還需要密碼

在服務A上,再次使用剛才的指令,發現已經可以不需要輸入密碼,如下所示:

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

本地伺服器A上建立定期備份腳本auto_backup_to_remote.sh,腳本内容如下

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

因為到時候,我們會将該定時遠端備份腳本auto_backup_to_remote.sh執行的時間,放到Gitlab自動備份腳本auto_backup.sh之後的一小時之内,是以我們隻需要每次執行遠端備份腳本auto_backup_to_remote.sh的時候,隻需要cp一個小時之内的生成的新的Gitlab備份檔案。

要執行腳本檔案,需要修改定時遠端備份腳本auto_backup_to_remote.sh的權限

現在為了驗證腳本是否可以正常運作,我們需要手動執行腳本。

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

如上圖所示,因為最後一次Gitlab備份時間為淩晨2點,而現在已經是下午3點半左右,是以我們需要修改腳本的查詢條件。

将查詢條件從 本地備份目錄下 時間為60分鐘之内的,并且字尾為.tar的gitlab備份檔案

修改為 本地備份目錄下 時間為1000分鐘之内的,并且字尾為.tar的gitlab備份檔案

先在終端執行find指令,看是否能夠正常查找出我們要scp到遠端伺服器的Gitlab備份檔案

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

将定時遠端備份腳本auto_backup_to_remote.sh修改完畢之後,我們試着手動執行該腳本,看是否能夠正常運作。

執行指令

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

執行該腳本檔案,在2分鐘之内就将最後一次的Gitlab備份檔案scp到了遠端伺服器B

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

我們切換到遠端伺服器B,檢視剛才從伺服器A 通過scp指令複制過來的Gitlab備份檔案,如下所示:

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

至此,從伺服器A複制備份檔案到伺服器B的腳本正常運作,但是如果每次都這樣來手動觸發腳本的話,太麻煩,是以我們需要定時執行腳本。

即vi /etc/crontab,然後添加相應的任務。

可以看到,這裡有我們之前寫好的定期淩晨2點執行Gitlab本機備份的定時任務

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

現在我們在上面的定時任務後面,再添加一個執行複制剛備份好的Gitlab備份檔案到伺服器B的腳本任務。如下所示:

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

編寫完 /etc/crontab 檔案之後,需要重新啟動cron服務

實際運作如下:

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

為了能夠測試,該腳本是否能夠在指定時間的時候,真的能夠自動執行,我們将時間修改為15:55分。修改如下:

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

然後重新開機cron服務

現在時間是15:58分,我們去檢視生成的log檔案,可以看到在15:55分的時候,腳本正常定時執行了

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

切換到遠端伺服器B,檢視從伺服器Acopy過來的Gitlab備份檔案

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

通過測試,可以發現定時任務也正常執行了,是以我們可以将時間改為淩晨3點來複制Gitlab備份檔案到遠端伺服器B。

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

通過如上圖所示,每個Gitlab備份檔案都很大,都有1G左右的大小。是以每天備份一次,過不了多久的話,備份伺服器B上的磁盤空間可能就會被Gitlab備份檔案占用完。

是以我們需要定期清理備份檔案,清理的時候我們可以自己定義,這裡我們規定:

備份檔案超過30天的都自動删除掉。

為了實作這個功能,我們需要在遠端伺服器B上編寫腳本來清理過期的備份檔案。

建立定期删除過期的備份檔案的腳本auto_remove_old_backup.sh

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

腳本内容如下 :

修改auto_remove_old_backup.sh腳本權限為777

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

如上圖所示,目前備份伺服器上,隻有一個8月17日15:56分copy過來的Gitlab備份檔案,為了能夠測試我們的腳本是否正常運作,我們建立幾個7月份的檔案,如下所示:

使用touch指令,建立指定時間的 test.tar 檔案

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

這樣我們就建立了4個7月1日到7月4日的的test1.tar、test2.tar、test3.tar、test4.tar

現在我們手動來執行我們的auto_remove_old_backup.sh腳本

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

對比執行auto_remove_old_backup.sh腳本前後,我們發現超過30天的,并且以.tar字尾結尾的檔案都被删除了,腳本正常。

然後編寫定時任務

寫完 /etc/crontab 檔案之後,需要重新啟動cron服務,因為遠端備份伺服器是Center OS 和之前的Gitlab伺服器 Ubuntu 有點不一樣,是以重新開機cron指令有所不同。

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

為了測試定期删除任務,現在時間是16:35,我們将腳本執行時間設定為16:40分,如下所示

然後重新開機cron服務,超過16點40分之後我們再檢視過期的.tar檔案是否被删除

Git學習-->如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本

如上所示,我們修改定時執行任務的時間後,删除任務正常執行,是以我們時間修改回淩晨4點删除過期備份檔案。

<a href="http://blog.csdn.net/ouyang_peng/article/details/77371161">Git學習–&gt;如何通過Shell腳本實作 監控Gitlab備份整個過程并且通過郵件通知得到備份結果?</a>

<a href="http://blog.csdn.net/ouyang_peng/article/details/77371161">http://blog.csdn.net/ouyang_peng/article/details/77371161</a>

Git學習--&amp;gt;如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本
作者:歐陽鵬 歡迎轉載,與人分享是進步的源泉!

如果本文對您有所幫助,歡迎您掃碼下圖所示的支付寶和微信支付二維碼對本文進行打賞。

Git學習--&amp;gt;如何通過Shell腳本自動定時将Gitlab備份檔案複制到遠端伺服器?一、背景二、伺服器密鑰配對,取消scp傳輸密碼限制三、密鑰配對四、建立Shell定時遠端備份腳本五、定時執行腳本六、定時删除遠端伺服器上的備份檔案七、定時執行删除腳本