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


一、緣由:

  之前由於服務器只能密鑰登陸,並限制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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM