Linux 无密码SCP在Crontab中失效的解决办法

Posted DevOps达人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 无密码SCP在Crontab中失效的解决办法相关的知识,希望对你有一定的参考价值。

一、缘由:

  之前由于服务器只能密钥登陆,并限制root账户登陆,故用SSH打通了所有服务器,实现了公钥转发scp免输密码等,极大方便了服务器的管理。

最近有个需求,是做数据的异地备份。最简单的用scp脚本喽,但是脚本手动执行是OK的,放入crontab确实不能正常运行。

 

二、解决办法:

  脚本执行失败,立马想到打印详细日志Debug,那scp -v 然后看日志,是因为密钥认证失败。我们SSH打通是基于ssh密钥转发的,

联想到之前crontab里拿不到环境变量的问题,可能问题就是crontab拿不到ssh-agent,所以认证失败。

  经过一顿google发现,keychain可以帮我们解决这个问题。

apt-get install keychain

kechain ~/.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

 

三、参考:

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





以上是关于Linux 无密码SCP在Crontab中失效的解决办法的主要内容,如果未能解决你的问题,请参考以下文章

Linux到Windows SCP无密码访问

linux ssh scp无密码登录

scp采用无密码在两台linux服务器之间传输数据

Linux scp 免密码 传输文件

Linux实现scp无密码传输

ssh 无密码登陆