zoukankan      html  css  js  c++  java
  • 【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

  • 相关阅读:
    maven
    sublime text
    ios category
    python
    activiti
    出版社
    gradle
    selenium
    spring
    Ansible状态管理
  • 原文地址:https://www.cnblogs.com/langdashu/p/7305677.html
Copyright © 2011-2022 走看看