作为Python脚本根目录的Git身份验证不';即使降级也不能工作
我有一个Python脚本,它需要在sudo模式下运行,还应该运行一些git命令(其中包括clone和push)。这些命令无法连接到服务器,因为它们以root用户身份运行,因此不使用我的普通用户ssh密钥 到目前为止,这是一个常见的问题,但问题是我已经在尝试在调用这些命令之前降级用户。我用过:作为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 =
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
(不确定这是否是个好主意,但效果如何),但问题仍然存在。。。