一、緣由:
之前由於服務器只能密鑰登陸,並限制root賬戶登陸,故用SSH打通了所有服務器,實現了公鑰轉發scp免輸密碼等,極大方便了服務器的管理。
最近有個需求,是做數據的異地備份。最簡單的用scp腳本嘍,但是腳本手動執行是OK的,放入crontab確實不能正常運行。
環境:Ubuntu 14.04
二、解決辦法:
腳本執行失敗,立馬想到打印詳細日志Debug,那scp -v 然后看日志,是因為密鑰認證失敗。我們SSH打通是基於ssh密鑰轉發的,
聯想到之前crontab里拿不到環境變量的問題,可能問題就是crontab拿不到ssh-agent,所以認證失敗。
經過一頓google發現,keychain可以幫我們解決這個問題。
apt-get install keychain
keychain ~/.ssh/id_rsa 輸入自己的加密短語
當然.ssh目錄要上傳自己的公鑰和密鑰,權限600
然后修改~/.profile,加入
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