2013-02-27 97 views
5

我正在嘗試使用結構來自動執行一些我在兩臺服務器上執行的管理工作。一般流程如下:以root用戶身份運行結構腳本

  1. SSH與本地用戶
  2. 運行:sudo su -成爲root(再次提供本地用戶密碼)
  3. 做的工作爲根:)

不幸使用run('sudo su -')阻止腳本的執行並允許用戶輸入。當我輸入exitCtrl+D時,scipt會恢復,但沒有root權限。

我在Switching user in Fabric看到了類似的問題,但因爲我不能改變/etc/sudoers文件,其中包含以下行,我僅限於sudo su -

localuser ALL = /usr/bin/su -

我瀏覽布料的來源嘗試找到解決方法但沒有成功。

+0

看看http://docs.fabfile.org/en/1.4.2/usage/env.html#sudo-prefix和這個例子:http://stackoverflow.com/questions/12641514/switch- to-different-user-using-fabric – alecxe 2013-02-27 14:37:16

+0

使用'sudo_prefix ='su - -c''按照該文章中的描述需要root密碼。如果我使用'sudo_prefix ='sudo su - -c''我得到這個錯誤信息'對不起,用戶本地用戶不允許執行'/ usr/bin/su - -c/bin/bash -l -c pwd'根主機名.' – Marin 2013-02-27 16:34:30

+0

設置'shell = False'似乎沒有效果。設置'pty = False'返回錯誤'sudo:沒有tty存在並且沒有指定askpass程序' – Marin 2013-02-28 07:15:13

回答

1

針對您的問題有幾種解決方案。首先,您要使用sudo運行命令。您可以使用織物法sudo而不是runruns a shell command on a remote host, with superuser privilegessudo ref)。

例如,這些命令是使用sudo執行:

sudo("~/install_script.py") 
sudo("mkdir /var/www/new_docroot", user="www-data") 
sudo("ls /home/jdoe", user=1001) 
result = sudo("ls /tmp/") 

另一個想法是,你想換一組命令(需要被sudo版)。 您可以使用Fabric上下文管理器(ref)來執行此操作。特別是,您可以使用prefixsettings

例如:

with settings(user='root'): 
    run('do something') 
    run('do another thing') 

會問你一次root密碼,然後執行命令爲根。 你可以用tweek設置來存儲密碼。

+0

這兩個解決方案都不適用於我。我嘗試了第一個,'sudo('pwd')'轉換爲'sudo -S -p'sudo密碼:'/ bin/bash -l -c「pwd」'我收到一條錯誤消息'對不起,用戶本地用戶不允許在主機名上以root身份執行'/ bin/bash -l -c pwd'。第二種解決方案意味着我擁有我沒有的root密碼。 – Marin 2013-02-27 15:39:32

+0

對於第二種解決方案,不能使用您通常使用的密碼來獲取超級用戶訪問權限? – gbozee 2016-08-09 19:20:56

4

已經面臨着同樣的問題,因爲你的,(只sudo su - user由管理員允許,sudo -u user -c cmd不允許的),這裏是與fabric我工作的解決方案:

from ilogue.fexpect import expect, expecting, run 

def sudosu(user, cmd): 
    cmd += ' ;exit' 
    prompts = [] 
    prompts += expect('bash', cmd) 
    prompts += expect('assword:', env.password) 

    with expecting(prompts): 
     run('sudo su - ' + user) 

def host_type(): 
    sudosu('root', 'uname -s') 
+0

這看起來像一個很好的解決方案,但它需要python在遠程機器上。 – jchysk 2015-05-18 18:52:03

0

有以下問題Sorry, user localuser is not allowed to execute '/usr/bin/su - -c /bin/bash -l -c pwd' as root on hostname. 你可以一個解決方案請嘗試sudo('mkdir ~/test_fabric',shell=False)。使用參數shell來避免bash參數-l

相關問題