我有一个简单的Flask应用程序,它等待来自我的存储库主机的webhooks。 webhook使用git.pull()
从预定义的存储库触发gitpython
最新修订版。 gitpython
代码类似于:
import git
repo_dir = '/path/to/repo'
g = git.cmd.Git(repo_dir)
g.pull()
应用程序以作为用户admin
的超级用户脚本启动,其ssh id_rsa.pub
公钥已作为部署密钥注册到存储库。
以注册用户admin
身份登录后,可以从命令行启动应用程序,并且可以从私有存储库成功提取。但是,当应用程序以supervisor
启动时,git.pull()
操作将失败,并显示ssh身份验证错误:
Permission denied (publickey).
fatal: Could not read from remote repository.
我可以确认用户启动supervisor
托管应用是否正确(admin
)。这表示超级用户脚本未使用同一用户的默认SSH密钥。
我已经看到一些参考设置了几个环境变量之一,GIT_SSH_COMMAND
或遗留GIT_SSH
。我已经尝试将这些值设置为替换ssh字符串(即GIT_SSH_COMMAND='ssh -i /path/to/key'
)和可执行文件(即GIT_SSH='/path/to/myssh'
),但无济于事。
有没有人遇到过这样的事情?这是一个意想不到的问题,我无法调试。
答案 0 :(得分:0)
你试过了吗?
import git
repo_dir = '/path/to/repo'
g = git.cmd.Git(repo_dir)
g.USE_SHELL = True
g.pull()