【Linux】 無密碼SCP在Crontab中失效的解決辦法

1、原因:

  以前因爲服務器只能密鑰登錄,並限制root帳戶登錄,故用SSH打通了全部服務器,實現了公鑰轉發scp免輸密碼等,極大方便了服務器的管理。centos

最近有個需求,是作數據的異地備份。最簡單的用scp腳本嘍,可是腳本手動執行是OK的,放入crontab確實不能正常運行。服務器

環境:Ubuntu 14.04ssh

2、解決辦法:

  腳本執行失敗,立馬想到打印詳細日誌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

 

3、參考:

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

相關文章
相關標籤/搜索