我想知道为什么ssh代理转发在cron作业中不起作用。我有一个简单的脚本,如:
ssh -A remote_host "ls ~"
我可以在没有任何密码输入的情况下运行此脚本,但在将其放入cron作业后,它总是失败:
Permission denied, please try again.
Received disconnect from ip_of_remote_host: 2: Too many authentication failures for myuser
有谁能告诉我如何解决这个问题?
非常感谢!
答案 0 :(得分:2)
启动ssh-agent时,需要在env文件中存储SSH_AGENT_PID或SSH_AUTH_SOCK,并在ssh脚本中提供它,
这是我用过的一个脚本,很久以前就从网上抓过了。
SSH_ENV=$HOME/.ssh/environment
function start_agent {
echo "Initialising new SSH agent..."
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
echo succeeded
chmod 600 ${SSH_ENV}
. ${SSH_ENV} > /dev/null
ssh-add id_rsa
}
if [ -f "${SSH_ENV}" ]; then
. ${SSH_ENV} > /dev/null
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
如果密钥是passphase保护,则手动运行它,它将存储在$ HOME / .ssh / environment中,如
SSH_AUTH_SOCK=/tmp/ssh-KldGwK6643/agent.6643; export SSH_AUTH_SOCK;
SSH_AGENT_PID=6644; export SSH_AGENT_PID;
在你的crontab中 。 $ HOME / .ssh / environment&& ssh -A blabla
如果您的服务器重新启动,则需要再次手动运行start_agent scrit
答案 1 :(得分:1)
您必须在ssh客户端设置环境变量SSH_AUTH_SOCK
才能启用ssh-agent功能(其中crontab不会为您设置)。
*/x * * * * SSH_AUTH_SOCK=agent-sock-file ssh remote "command"
确保crontab运行时agent-sock-file
存在