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

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

我在其中一台服务器上有一个 Bitbucket 存储库的本地副本(用户为 rob),我创建了一个脚本,该脚本在 cron 中每小时运行一次并尝试提取和更新本地副本。我遇到的问题是,该脚本hg pull失败了,尽管我在 cron 之外按照相同的程序操作时,它运行正常。

我设置了一个 ssh 密钥,用于以正常方式访问 Bitbucket(即按照 Bitbucket 文档中的指南进行操作)然后仓库最初被克隆了

cd /home/rob
hg clone ssh://[email protected]/robjohncox/tools

更新脚本/home/rob/bin/update_tools.sh为:

#! /bin/bash
cd /home/rob/tools
hg pull >> /tmp/update_tools.log
hg update >> /tmp/update_tools.log

用户 rob 的 crontab 是:

0 * * * * /home/rob/bin/update_tools.sh

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

remote: Permission denied (publickey).

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

答案1

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

hg pull -e 'ssh -i /location/of/key'

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

答案2

尝试将以下内容添加到您的 ~/.ssh/config 文件

Host example.com
IdentityFile ~/.ssh/id_bitbucket

告诉 ssh 对相关服务器使用不同的密钥。

相关内容