我有一个需要在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)
答案 0 :(得分:0)
HOME
环境变量设置为什么?确保它指向mark
的主页,而不是root
。