我正在尝试通过cron作业更新我的私有存储库,但似乎没有任何反应。我正在使用 Satis 为我的私有包创建存储库。
我可以通过SSH登录我的帐户并运行以下命令来手动执行此操作:
php bin/satis build satis.json ./ -n
除了我必须输入一百万次密码之外,它更新了一切。我可以通过使用SSH Agent
来解决这个问题,并认为这可能是我的问题......
php /home/accountname/public_html/bin/satis build /home/accountname/public_html/satis.json /home/accountname/public_html/ -n
我错过了什么吗?
更新
这是我通过电子邮件收到此错误的SSH身份验证(缩短版本(
读取供应商/包的作曲家.json (主(
更新失败 git@bitbucket.org:vendor/package.git,软件包信息来自此 存储库可能已过时(权限被拒绝(公钥((。致命:该 远程端意外挂断错误:无法获取源(
在文档中,它说使用-n
来使用SSH密钥,但我正在使用它。
有什么想法吗?
更新
以为我会添加我的 satis 文件结构:
{
"name": "Name Of My Repo",
"homepage": "http://repodomain.co.uk",
"repositories": [
{ "type": "vcs", "url": "git@bitbucket.org:vendor/package.git" }
],
"require-all": true
}
真的卡在这个上面,文档是废话!
你是对的,SSH身份验证是这里的问题。
当 cronjob 运行时,它必须以某种方式访问您的 Bitbucket 存储库。您选择使用使用 SSH 的"git"协议。使用 SSH 时,使用基于密钥的身份验证比使用密码要好得多 - 当涉及到 git 存储库时,大多数时候这是唯一的方法,具体取决于托管。
要么将私钥放在该 cron 服务器上以访问 Bitbucket(可能是个坏主意(,要么创建一个新的密钥对并使用它来允许访问您的存储库(更好,除非您遇到 bitbucket 帐户的一些限制,例如如果该密钥算作用户的用户太多 - 另一方面,您可以将此密钥限制为仅允许读取, 不写(。
确保用于运行 cronjob 的用户使用这些密钥,例如,您应该能够在没有任何代理的情况下手动启动脚本,并且它应该在不要求输入密码的情况下完成。私钥的正确位置是~/.ssh
,公钥转到Bitbucket。之后,一切都应该在 cronjob 中完美运行。
另一种方法是使用不同的协议(如HTTPS(进行存储库访问,看看会发生什么。