在 cron 作業中透過安全 ssh 使用 rsync

在 cron 作業中透過安全 ssh 使用 rsync

我正在嘗試在 Debian GNU/Linux 下設定 shell 腳本,以將目錄和子目錄備份到透過 SSH 運行 Linux 的遠端 NAS。此連線必須加密。

我嘗試了幾種不同的方法,rsync rsh但沒有運氣。我知道如何設置crontab,但我需要一個可以在無人值守的情況下運行的腳本(即,它不會要求輸入密碼)

有人可以幫我嗎?

編輯:我現在可以成功登入而無需密碼。

現在的問題是讓 rsync 將檔案複製/backups/[remote system]:/backups/

它僅將一個資料夾從/backups/複製到[remote system]:/backups/

編輯:似乎本地系統有一個 /backups 和一個 /backup...我應該使用 /backup 時嘗試過 /backups...

最終命令:rsync -avzr -e ssh /backup/ admin@[IP]:/backups/

答案1

rsync 自 2.6.x 起預設使用 ssh 進行傳輸。因此,只要您的遠端 NAS rsync 支持,就已經解決了。

至於無密碼無人值守傳輸,請為執行 cron 的使用者設定基於 ssh 金鑰的身份驗證,這應該完成。設定方法如下——http://www.cyberciti.biz/tips/ssh-public-key-based-authentication-how-to.html

答案2

您也可以將此標誌傳遞給 rsync 以使用檔案作為密碼:

--密碼文件

可以輕鬆地將檔案 chmod 為 400,這樣除了您的使用者之外沒有人可以讀取該檔案(當然還有 root)

答案3

SSH 金鑰同步你說你可以正常工作,但我想我仍然會發布步驟

ssh 到您的 NAS

製作鑰匙

ssh-keygen -t rsa on local machine 

然後同步到您要備份的計算機

cat ~/.ssh/id_rsa.pub | ssh user@hostname    ‘cat>>.ssh/authorized_keys’

Rync 備份腳本 - 這將為今天建立備份資料夾,然後 sycn 昨天的檔案今天這將減少網路負載,然後它將 rsync 今天進行備份。

#!/bin/sh

mkdir -p /storage/backups/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$username

rsync -avz /storage/backups/`date --date=yesterday +\%Y-\%m-\%d`-`date--date=yesterday    +\%A`/$host/$username/ /storage/backups/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$username/

rsync -avz -e ssh  /home/username/ /storage/backups/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$username/

您還需要一個清理備份的腳本:這將保留一週的備份,我可以確認這適用於 Netgear 的現成 nas

#!/bin/sh

# Definitions
sevendaysago=$(date --date='6 days ago' +%Y-%m-%d-%A)

# Delete backups from 7 days ago
rm -rf /storage/backups/$sevendaysago

您需要執行此命令才能使腳本可執行

chmod u+x script.sh

在 cron 中你只需要透過 crontab -e 添加

@daily sh backupscript
1 17 * * * sh dailycleanup

相關內容