3

我想知道为什么 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

谁能告诉我如何解决这个问题?

非常感谢!

4

2 回答 2

2

当您启动 ssh-agent 时,您需要将 SSH_AGENT_PID 或 SSH_AUTH_SOCK 存储在一个 env 文件中,并在您的 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

如果密钥受密码保护,则手动运行它,它将存储在 $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 脚本

于 2012-08-20T07:12:21.310 回答
1

您必须在 ssh 客户端设置环境变量SSH_AUTH_SOCK才能启用 ssh-agent 功能(其中 crontab 没有为您设置)。

*/x * * * * SSH_AUTH_SOCK=agent-sock-file ssh remote "command"

确保agent-sock-filecrontab 运行时存在

于 2012-08-20T07:12:45.060 回答