作为Python脚本根目录的Git身份验证不';即使降级也不能工作

作为Python脚本根目录的Git身份验证不';即使降级也不能工作,python,git,ssh,Python,Git,Ssh,我有一个Python脚本,它需要在sudo模式下运行,还应该运行一些git命令(其中包括clone和push)。这些命令无法连接到服务器,因为它们以root用户身份运行,因此不使用我的普通用户ssh密钥 到目前为止,这是一个常见的问题,但问题是我已经在尝试在调用这些命令之前降级用户。我用过: def bash_background_demoted(cmd_list): def _demote(): if getuid() == 0: user =

我有一个Python脚本,它需要在sudo模式下运行,还应该运行一些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环境变量设置正确。用户设置不正确,但设置它不会更改错误

编辑2: 我已经核实了问题的真正原因是钥匙。我将我的复制到/root/.ssh/,错误就消失了。但这不是一个好的解决方案


(该解决方案只需在最新版本的Python 2的Ubuntu上运行)

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

好主意,但是
os.getenv('home'))
返回主程序中的
/home/mark
,并在降级结束时返回
$home
在通过
bash\u background\u降级运行的shell脚本中是正确的
错误想法/可能性:可能
ssh
以某种不希望的方式使用了
$USER
,因此尽管
$home
是可以的,它还需要将
$USER
设置为
mark
?它被设置为
root
,我将其更改为
mark
(不确定这是否是个好主意,但效果如何),但问题仍然存在。。。