2013-10-29 55 views
0

我如何「蘇 - 」並通過與織物的根密碼?我目前的工作不能給我們sudoers,而是使用su - 根(在我看來愚蠢)。在谷歌搜索我沒有找到一個簡單的(或任何工作)的答案。蘇根與蟒蛇織物

我的織物正常代碼如下:

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

需要能夠

run('su -') 

,並把它傳給我的密碼。

+0

這是你要找的東西:http://stackoverflow.com/a/12648391/202504 – jmiserez

+0

你爲什麼需要su到root密碼?爲什麼不直接使用Fabric的內置'sudo'功能? – Greg

+0

我公司的安全團隊是白癡,不會給我們sudo訪問.....但由於某些原因,他們沒有我們的root密碼。要繼續與他們戰鬥,給我們sudo。 – cashman04

回答

0

我聽到你說你的政策不允許使用「sudo」命令。瞭解。

但是當你嘗試使用Fabric sudo()時會發生什麼?請嘗試並報告。

我不認爲sudo()「需要」在另一端的sudo提示符。什麼sudo()是一個run()命令,它預期密碼提示並嘗試響應它。就這樣。

所以在你的情況下,「sudo('su - ')」。如果失敗,請嘗試「sudo('su - -c whoami')看看你是否有任何暫時的成功。

我想要做的是運行()和sudo()sudo()並運行()幾乎完全相同,除了sudo()會預測服務器提示符,然後回答它。這就是區別。

相反,我最近遇到了一個不同的問題,我試圖用sudo SSH密鑰我無法理解爲什麼Fabric在bash + ssh沒有提示密碼時文檔不清楚,但最終我意識到提示符是我做的,因爲我認爲sudo level命令sudo()。Untrue。如果你的命令不需要提示,使用run(),如果你的命令需要密碼輸入,使用sudo()。

最糟糕的情況是,如果sudo()不適合你,它仍然會創建一個SSH連接的AttributeObject。你可能會也可能不能將某些「輸入」推送到該對象的stdin屬性中(我不確定這是否正確,未經測試。但是,這就是你要用Paramiko做的事情,盲目地將文本發送到連接的STDIN,它會被提示取回)。

絕對最壞的情況下,調用sudo()/ run()上的「期望」命令將工作,但可能不是最簡單的最乾淨的解決方案。