[工作記錄]讓Apache(PHP)透過SFTP免登入密碼自動化備份

Standard

由於主機上越來越多案件的程式了,之前都是自動備份到 Google Drive 上。

但由於 Google Drive 本身就只有 15GB的空間,而且單次檔案上傳的容量又有上限(忘了多少了),所以逼的自己在打包備份的案子之後,還要以每50MB為單位做切割。

最主要還是Google Drive空間常常爆掉,所以這次決定放棄Google Drive將備份移到另一台VPS主機。也就是有一台Web伺服器,一台備份機。

兩台機器之間就透過 SFTP的方式來做定期自動備份的工作。

問題來了

ssh account@host [command]

每次從Web伺服器透過 ssh 來傳檔或下指令,都需要手動登入密碼。導致我無法自動化將檔案從Web伺服器丟到備份機上面去。

爬了一下 Google,也是有滿多人有這樣的需求的,但我發現下面這篇一步一步教你怎麼完成,寫的很好。

SSH Passwordless Login Using SSH Keygen in 5 Easy Steps

他是透過Web伺服器產生公鑰、私鑰的方式,將公鑰丟給備份機,就這樣,我達到我的目的了。我以為!

 

確實,我已經可以在文字模式下,直接從Web伺服器來丟檔案到備份機上面。

但這僅限於我當時製作公私鑰的那個ssh帳號。

其實我真正的需求是透過我自己用PHP寫的管理介面來控管每個案件的程式備份頻率,因為除了程式還有資料庫以及案件的上傳檔案,這些的備份頻率都不相同,所以不單單只是在 Linux 的Cront 下指令備份。

例如:

案件主程式:由於已經開發完畢了,所以每一個星期備份個一次,僅保留兩星期的份就好了。(開發中則頻率會再高一些)

資料庫:資料是常常在變動的,所以每天備份一次,保留一個星期

上傳檔案:也就是用戶透過系統上傳的檔案,由於也是常常變動,所以每天備份一次,保留一個星期

每個案件的狀態不同,頻率也就不同。所以才會需要一個後台管理介面來協助管理備份。

扯遠了!

也就是說,我必需幫 apache 這個帳號建立一個公私鑰,然後再將公鑰丟給備份機。

問題又來了,根本無法使用 apache 做為帳號來登入 ssh,那我該怎麼幫他建立一組公私鑰呢?

sudo -u apache ssh-keygen -t rsa

接下來在建立公私鑰的過程中,會出現…

Enter file in which to save the key (/xxx/xxx/xxx/.ssh/id_rsa)

這樣你就知道你的密鑰被放在哪個位置上了。

接下來就如解決第一個問題一樣的步驟就可以囉