我正在嘗試在 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