Su-root与python结构

Su-root与python结构,python,fabric,Python,Fabric,如何使用fabric“su-”和传递根密码?我目前的工作没有给我们sudoers,而是使用su-to-root(在我看来很愚蠢)。在谷歌上,我还没有找到一个简单(或任何有效)的答案 我对织物的常规代码如下: from fabric.api import * env.host_string="10.10.10.10" env.user="mahuser" env.password="mahpassword" run('whoami') 需要能够 run('su -') 并让它通过我的密码。我

如何使用fabric“su-”和传递根密码?我目前的工作没有给我们sudoers,而是使用su-to-root(在我看来很愚蠢)。在谷歌上,我还没有找到一个简单(或任何有效)的答案

我对织物的常规代码如下:

from fabric.api import *
env.host_string="10.10.10.10"
env.user="mahuser"
env.password="mahpassword"
run('whoami')
需要能够

run('su -') 

并让它通过我的密码。

我听到你说你的政策不允许使用“sudo”命令。明白

但是当您尝试使用Fabric sudo()时会发生什么?请试一试并报告

我不认为sudo()在另一端“需要”sudo提示符。sudo()是一个run()命令,它预期密码提示并尝试响应。就这些

所以在你的例子中,“sudo('su-')”。如果失败了,试试“sudo('su--c whoami'),看看你是否有任何暂时的成功

我想说的一点是run()和sudo()sudo()和run()几乎是一样的,只是sudo()会预测一个服务器提示,然后回答它。这就是区别

相反,我最近遇到了一个不同的问题,我试图使用SSH密钥抑制对sudo()的提示。我无法理解为什么Fabric会提示输入密码,而bash+SSH没有。文档不清楚,但最终我意识到提示是我做的,因为我认为sudo级别的命令需要sudo()。不正确。如果您的命令不需要提示,请使用run(),如果您的命令需要输入密码,请使用sudo()

最糟糕的情况是,如果sudo()不适用于您,它仍将创建SSH连接的AttributeObject。您可能无法将某些“输入”推送到该对象的stdin属性中(我不确定这是否正确,这是未经测试的。但这就是你对Paramiko所做的,盲目地将文本发送到连接的STDIN,然后被提示拾取)


绝对最坏的情况,在“expect”上调用sudo()/run()"命令将起作用,但可能不是最简单、最干净的解决方案。

以下是您正在寻找的:为什么您需要su到根密码?为什么不使用fabric的内置sudo功能?我公司的安全团队是白痴,不会给我们sudo访问权限……但出于某种原因,他们对我们拥有根密码很满意剑,继续和他们战斗,给我们苏多。