在主管

时间:2015-09-07 22:38:01

标签: python ssh supervisor gitpython

我有一个简单的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'),但无济于事。

有没有人遇到过这样的事情?这是一个意想不到的问题,我无法调试。

1 个答案:

答案 0 :(得分:0)

你试过了吗?

import git
repo_dir = '/path/to/repo'
g = git.cmd.Git(repo_dir)
g.USE_SHELL = True
g.pull()