0

我有一个 Python 脚本,需要在 sudo 模式下运行,并且还应该运行一些 git 命令(其中包括克隆和推送)。这些命令无法连接到服务器,因为它们以 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 上运行)

4

1 回答 1

0

HOME环境变量设置成什么?确保它指向mark's home 而不是root's。

于 2013-07-23T19:27:04.813 回答