以前因爲服務器只能密鑰登錄,並限制root帳戶登錄,故用SSH打通了全部服務器,實現了公鑰轉發scp免輸密碼等,極大方便了服務器的管理。centos
最近有個需求,是作數據的異地備份。最簡單的用scp腳本嘍,可是腳本手動執行是OK的,放入crontab確實不能正常運行。服務器
環境:Ubuntu 14.04ssh
腳本執行失敗,立馬想到打印詳細日誌Debug,那scp -v 而後看日誌,是由於密鑰認證失敗。咱們SSH打通是基於ssh密鑰轉發的,google
聯想到以前crontab裏拿不到環境變量的問題,可能問題就是crontab拿不到ssh-agent,因此認證失敗。加密
通過一頓google發現,keychain能夠幫咱們解決這個問題。spa
apt-get install keychain.net
keychain ~/.ssh/id_rsa 輸入本身的加密短語日誌
固然.ssh目錄要上傳本身的公鑰和密鑰,權限600server
而後修改~/.profile,加入 crontab
export HOSTNAME=`hostname` # HOSTNAME not set some machines
if [ -x /usr/bin/keychain -a -f $HOME/.keychain/${HOSTNAME}-sh ] ; then
/usr/bin/keychain --clear $HOME/.ssh/id_rsa
source $HOME/.keychain/${HOSTNAME}-sh
fi
而後在腳本中加入:
source $HOME/.keychain/${HOSTNAME}-sh
centos6安裝keychain
yum install https://kojipkgs.fedoraproject.org//packages/keychain/2.8.0/2.fc23/noarch/keychain-2.8.0-2.fc23.noarch.rpm
http://www.snowfrog.net/2007/11/15/ssh-ssh-agent-keychain-and-cron-notes/
https://wiki.gentoo.org/wiki/Keychain/zh-cn
https://serverfault.com/questions/92683/execute-rsync-command-over-ssh-with-an-ssh-agent-via-crontab