我想从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')
它再次询问密码。 我的代码怎么了。我尝试了以上所有的尝试后,在互联网上做了一些搜索,似乎他们应该工作。在
要添加用户交互,您应该使用
pexpect
(http://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条目。在
编辑:最好将您想要的特定命令包装在脚本中,然后允许他们使用sudo访问脚本而不使用密码;显然,“make”相当危险。。。在
相关问题 更多 >
编程相关推荐