从Python脚本以root身份进行Git身份验证即使在降级时也不起作用

时间:2013-07-23 19:21:54

标签: python git ssh

我有一个需要在sudo模式下运行的Python脚本,并且还应该运行一些git命令(其中包括clone和push)。这些命令无法连接到服务器,因为它们以root用户身份运行,因此不能使用我的普通用户ssh密钥。

到目前为止,这是一个常见的问题,但问题是我在调用这些命令之前已经尝试降级用户。我用过:

def bash_background_demoted(cmd_list):
    def _demote():
        if getuid() == 0:
            user = getenv('SUDO_USER')
        else:
            user = getenv('USER')
        uid, gid = pwd.getpwnam(user)[2:4]
        setegid(gid)
        seteuid(uid)

    process = Popen(cmd_list, stdout = PIPE, stderr = PIPE, preexec_fn = _demote)
    outp, err = process.communicate()
    print outp + err

此方法似乎适用于其他命令,但不适用于git:

bash_background_demoted(['whoami'])
# mark
bash_background_demoted(['git', 'clone', 'ssh://git@bitbucket.org/stuff', '/repo/dir/'])
# Permission denied (publickey).
# fatal: The remote end hung up unexpectedly

如果我不以sudo身份运行,它确实有效(但其他部分会中断,所以它不是一个可接受的解决方案)。

-i [keyfile]参数对于推送不存在。有人知道解决方案吗?可能是微不足道的,但我被困了......

编辑: HOME环境变量在主进程和子进程中正确设置。 USER未正确设置,但设置它不会更改错误。

EDIT2: 我已经确认它确实是造成问题的关键因素。我将我复制到/root/.ssh/,错误就消失了。虽然不是一个好的解决方案。

(解决方案只需要在最新版本的Python 2中使用Ubuntu)

1 个答案:

答案 0 :(得分:0)

HOME环境变量设置为什么?确保它指向mark的主页,而不是root

相关问题