【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

相关文章
相关标签/搜索