波本的sudo命令

2024-10-02 18:23:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从python模块中运行sudo命令,并在python代码中提供密码。以下是我失败的尝试:

output = subprocess.Popen(['sudo', 'make', 'install'], stdout=subprocess.PIPE, stdin=subprocess.PIPE)
print output.communicate('mypass\n')

它从控制台窗口询问密码(然后我不想要)。然后我试着:

^{pr2}$

它再次询问密码。然后我试着:

os.popen("sudo make install", 'w').write('mypass')

它再次询问密码。 我的代码怎么了。我尝试了以上所有的尝试后,在互联网上做了一些搜索,似乎他们应该工作。在


Tags: 模块install代码命令密码outputmakestdin
3条回答

要添加用户交互,您应该使用pexpecthttp://www.noah.org/wiki/pexpect)而不是popen。这将允许您的程序正确运行sudo。在

在脚本中保存密码总是一个坏主意,允许通过修改sudoer进行访问,尤其是对make之类的东西进行访问是一个安全漏洞。在

sudo、ssh、sftp都被设计成知道是否有tty连接,所以它们要求输入密码。原因是在代码中输入密码是一种严重的安全违规行为。在

您也可以使用expect实用程序来运行sudo或ssh以及python代码。。。在

Use expect in bash script to provide password to SSH command

另一个选项是为特定命令和特定用户添加/etc/sudoers条目。在

builduser ALL=NOPASSWD: /usr/bin/make

编辑:最好将您想要的特定命令包装在脚本中,然后允许他们使用sudo访问脚本而不使用密码;显然,“make”相当危险。。。在

相关问题 更多 >