以前因为服务器只能密钥登录,并限制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