我想知道为什么 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
谁能告诉我如何解决这个问题?
多谢!
当你启动 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 scrit
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)