我目前正在远程环境中工作,该环境的用户具有某些sudo权限,不需要输入任何密码。
具体来说,到目前为止,它可以执行一些nginx命令而不需要密码。当我有一个负责检查更新的python脚本以及是否有更改尝试重新加载nginx时,就会遇到我遇到的问题。如下所示
Popen(['sudo', 'nginx', '-T'], stdin=PIPE, stdout=PIPE, stderr=PIPE)
call(["sudo", "systemctl", "reload", "nginx.service"])
当脚本到达此步骤之一时,会在终端上弹出提示您输入密码的提示,这是不必要的,因为运行脚本的用户有权运行命令而无需输入密码。
问题:也许有一种方法,不用对变量中的密码进行硬编码,就能告诉脚本在我运行时“继承”用户的权限吗?
一些其他信息:
编辑:感谢一位朋友解决了这个问题:
解决方案是将'shell = True'参数添加到Popen。
Popen('sudo nginx -T'], shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)
答案 0 :(得分:0)
问题可能是在脚本执行过程中使用的sudoers nginx-path和PATH变量不匹配。
尝试使Popen调用与sudoers文件中给出的完整PATH相匹配,或者在调用Python脚本的shell中调整PATH。