从 cron 运行时,来自 Bitbucket 的 hg pull 失败

rob*_*cox 5 mercurial cron ssh-keys

我在我的一台服务器上(在用户 rob 下)有一个 Bitbucket 存储库的本地副本,我创建了一个脚本,该脚本在 cron 中每小时运行一次,并尝试拉取和更新本地副本。我遇到的问题是hg pull失败,即使当我在 cron 之外遵循相同的程序时它也能正常工作。

我设置了一个以正常方式访问 Bitbucket 的 ssh 密钥(即遵循 Bitbucket 文档中的指南),然后 repo 最初被克隆

cd /home/rob
hg clone ssh://hg@bitbucket.org/robjohncox/tools
Run Code Online (Sandbox Code Playgroud)

更新脚本在/home/rob/bin/update_tools.sh

#! /bin/bash
cd /home/rob/tools
hg pull >> /tmp/update_tools.log
hg update >> /tmp/update_tools.log
Run Code Online (Sandbox Code Playgroud)

用户 rob 的 crontab 是:

0 * * * * /home/rob/bin/update_tools.sh
Run Code Online (Sandbox Code Playgroud)

一切都非常简单。但是,当作业运行时,我们看到调用hg pull失败并输出

remote: Permission denied (publickey).
Run Code Online (Sandbox Code Playgroud)

有没有人知道为什么会发生这种情况 - 我是否需要采取其他一些步骤,以便在 cron 运行时它可以访问相关的公钥?该update_tools.sh脚本在 shell 中运行良好。

tom*_*-hd 4

尝试明确指定 ssh 命令,例如

hg pull -e 'ssh -i /location/of/key'
Run Code Online (Sandbox Code Playgroud)

Cron 使用最小的 shell 运行,因此无法访问您的 ssh-agent 进程,因为未设置 SSH 环境变量。