苏根和python fabri

2024-06-01 09:43:21 发布

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

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

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

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

需要能够

^{pr2}$

让它通过我的密码。在


Tags: to答案代码fromimportenvapi密码
1条回答
网友
1楼 · 发布于 2024-06-01 09:43:21

我听到你说你的政策不允许使用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。然后,您可能无法将一些“input”推送到该对象的stdin属性中(我不确定这是否正确,它尚未测试。但这就是Paramiko所做的,盲目地将文本发送到连接的STDIN,它会被提示符接收)。在

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

相关问题 更多 >