我如何“su - ”并使用fabric传递root密码?我目前的工作并没有给我们sudoers,而是使用su - root(在我看来是愚蠢的)。在谷歌搜索我没有找到一个简单的(或任何工作)答案。
我的常规面料代码如下:
from fabric.api import *
env.host_string="10.10.10.10"
env.user="mahuser"
env.password="mahpassword"
run('whoami')
需要能够
run('su -')
并通过我的密码。
答案 0 :(得分:0)
我听说您的政策不允许使用“sudo”命令。理解。
但是当你尝试使用Fabric sudo()时会发生什么?请尝试并报告。
我不认为sudo()在另一端“需要”一个sudo提示符。 sudo()是一个run()命令,它预测密码提示并尝试响应它。就是这样。
所以在你的情况下,“sudo('su - ')”。如果失败,请尝试“sudo('su - -c whoami'),看看你是否有任何暂时的成功。
我想要的是run()和sudo()sudo()和run()几乎相同除了sudo()预期服务器提示,然后回答它。这就是区别。
相反,我最近遇到了一个不同的问题,我试图使用SSH密钥来抑制sudo()的提示。当bash + ssh不是时,我无法理解为什么Fabric提示输入密码。文档不清楚,但最终我意识到提示是我做的因为我认为sudo级别命令需要sudo()。不真实的。如果您的命令不需要提示,请使用run(),如果您的命令需要密码输入,请使用sudo()。
最糟糕的情况是,如果sudo()不适合你,它仍然会创建一个SSH连接的AttributeObject。您可能会或者可能无法将某些“输入”推送到该对象的stdin属性中(我不确定这是否正确,它是未经测试的。但这就是您使用Paramiko所做的,盲目地将文本发送到连接的下方STDIN和它被提示拾取。
绝对最坏的情况,在“expect”命令上调用sudo()/ run()哪个会工作,但可能不是最简单最干净的解决方案。