Rsync over SSH with No Password (Crontab)
這裡我將簡單紀錄,最基礎的異地同步備份方法:
—如何使用 rsync + ssh + crontab 製作 mirror Files。
因為示範的關係,所以採用一般 User 來進行,
實際狀況下,如果採用 root 進行 ssh 遠端同步時,
必須修改:/etc/ssh/sshd_config。
並設定:
PermitRootLogin no
PermitRootLogin forced-commands-only
另外也必須注意,備份檔案的相關許可權問題。
########################################
rsync + ssh 基本同步化
########################################
$ sudo apt-get install rsync ssh
$ man rsync
-a, --archive (archive mode)
-v, --verbose (increase verbosity)
-z, --compress (compress file data)
-e, --rsh=COMMAND (specify rsh replacement)
--rsync-path=PATH (specify path to rsync on the remote machine)
透過 ssh 將 yenjinc.info 的 ~/backup,備份至本地端 /backup。
$ rsync -avz -e ssh yenjinc@yenjinc.info:~/backup/ /backup/
yenjinc@yenjinc.info’s password: ←(輸入密碼)
如果需要 mirror 遠端與本地端的資料,請加上 --delete 選項。
$ rsync -avz -e ssh --delete yenjinc@yenjinc.info:~/backup/ /backup/
yenjinc@yenjinc.info’s password: ←(輸入密碼)
以上僅適合一般同步作業,因為 ssh 必須提示輸入密碼才能進行同步化,
如果放在 Crontab 的話,會因為沒有辦法 key in password 而整個 hang 在那。
########################################
產生 ssh 公開金鑰與私密金鑰
########################################
rsync 會利用 ssh 登入到遠端主機,需要帳號與密碼。
若要在 crontab 中不需要輸入密碼就登入,必須製作 public / private keys。
$ ssh-keygen -t dsa -b 1024 -f yenjinc.info-key ←(file name 可自訂)
Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase): ←(不需輸入,直接按 Enter)
Enter same passphrase again: ←(不需輸入,直接按 Enter)
Your identification has been saved in yenjinc.info-key.
Your public key has been saved in yenjinc.info-key.pub.
The key fingerprint is:
41:29:60:49:40:c3:a0:8f:2f:74:4e:40:64:a5:42:db Denny@PowerBook-G4.local
(公開金鑰與私密金鑰製作完成)
這時候目錄下會產生兩個檔案:
yenjinc.info-key
yenjinc.info-key.pub ←(必須放置到遠端的主機裡)
必須將 yenjinc.info-key.pub 放到遠端 ~/.ssh/authorized_keys 裡。
$ scp yenjinc.info-key.pub yenjinc@yenjinc.info:~/.ssh/
yenjinc@yenjinc.info’s password: ←(輸入密碼)
yenjinc.info-key.pub 100% 614 0.6KB/s 00:00
登入到遠端的主機,把 pub key 加入 authorized_keys 中。
$ ssh yenjinc@yenjinc.info
yenjinc@yenjinc.info’s password: ←(輸入密碼)
yenjinc@~$ cd .ssh/
yenjinc@~/.ssh$ cat yenjinc.info-key.pub >> authorized_keys
yenjinc@~/.ssh$ chmod 600 authorized_keys
完成之後,離開遠端主機,並且測試一下,是否已經可以不需密碼即 ssh login。
$ ssh -i yenjinc.info-key yenjinc@yenjinc.info ←(使用 -i 指定剛才的私密金鑰)
yenjinc@~$ ←(順利完成!不需密碼即可登入。)
########################################
rsync + ssh + No Password 基本同步化。
########################################
接著下來,即可利用 Rsync 透過 SSH 來同步本地與遠端的資料,而不需輸入密碼。
不用密碼的好處是,可以把 rsync 同步備份指令,寫在 Crontab 下自動執行。
透過 ssh 將 yenjinc.info 的 ~/backup,備份至本地端 /backup。
$ rsync -avz -e “ssh -i yenjinc.info-key” yenjinc@yenjinc.info:~/backup/ /backup/
←(順利完成!不需密碼,即可將遠端資料備份過來。)
如果需要 mirror 遠端與本地端的資料,請加上 --delete 選項。
$ rsync -avz -e “ssh -i yenjinc.info-key” --delete yenjinc@yenjinc.info:~/backup/ /backup/
←(順利完成!不需密碼,即可將將遠端的資料製作一份 mirror 到本地端。)
########################################
rsync + ssh + No Password + Crontab 基本同步化。
########################################
基本上,如果上面那一個步驟已經順利成功的話,在加上 Crontab 就不會出錯了。
只要將剛才那串指令,加到 crontab 指令中就行啦!
以下的 Script. 是在我的 OSX + Fink 的環境,若是 Linux 則需要另做修改。
#!/bin/bash
RSYNC=/sw/bin/rsync
SSH=/usr/bin/ssh
KEY=/Users/Denny/yenjinc.info-key
USER=yenjinc
HOST=yenjinc.info
REMOTE_DIR=/home/yenjinc/backup/
LOCAL_DIR=/Users/Denny/backup/
# rsync+ssh+crontab command
$RSYNC -avz -e “$SSH -i $KEY” --delete $USER@$HOST:$REMOTE_DIR $LOCAL_DIR
將以上 script. 內容,儲存為 /Users/Denny/crontab-file。
完成後,即可設定 Crontab。
$ crontab -e
*/2 * * * * /Users/Denny/crontab-file
大功告成,每兩分鐘就執行異地同步備份一次。
########################################
後記 (備註):
########################################
以上所有內容,僅是基本的 rsync+ssh+crontab 示範與練習。
如果是 Server 的環境,詳細的內容就更為繁複啦!
若想延伸閱讀,可參考以下。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-627080/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Jenkins Publish Over SSHJenkins
- jenkins外掛Publish Over SSH因安全問題下架Jenkins
- 又一個Rust練手專案-wssh(SSH over Websocket Client)RustWebclient
- 如何使用 rsync 透過 SSH 恢復部分傳輸的檔案
- ubuntu ssh: connect to host ** port 22: Connection refused ssh登入遠端伺服器時提示Permission denied (publickey,password)Ubuntu伺服器
- rsync
- 慎用rsync
- Django中的函式make_password、set_password和check_passwordDjango函式
- crontab 使用
- crontab 示例
- no-wwwtl622com17008768000-password never prompt for password
- Linux下crontab命令的用法:sudo crontab -lLinux
- Rsync安全配置
- rsync 用法教程
- Linux命令---rsyncLinux
- rsync 使用示例
- mysql自動排序函式dense_rank() over()、rank() over()、row_num() over()用法和區別MySql排序函式
- iOS Password AutoFilliOS
- Password Storage - UserDetailsAI
- crontab 定時
- crontab任務
- crontab 命令使用
- crontab usage guideGUIIDE
- Crontab 的使用
- rsync 同步目錄
- rsync 故障排查整理
- rsync實時同步
- 資料同步rsync
- rsync 命令及其示例
- Rsync資料同步
- rsync遠端同步
- rsync客戶端一鍵安裝rsync指令碼(原始碼)客戶端指令碼原始碼
- URL password 屬性
- scp without interative password
- crontab大全留存
- 幕後黑手 crontab
- {"error":400,"message":"over quota"}Error
- Review: Red Star over ChinaView
- Rsync服務詳解