2013-02-27 17 views
5

私はいくつかのサーバーで行っている管理作業を自動化するためにファブリックを使用しようとしています。一般的な流れは以下の通りです:ローカルユーザーとファブリックスクリプトをルートとして実行中

  1. SSH
  2. 実行:sudo su -は残念ながら

:)

  • がrootとして作業を行います(再びローカルユーザーのパスワードを提供する)ルートになるためにrun('sudo su -')を使用すると、スクリプトの実行をブロックし、ユーザーの入力を許可します。 exitまたはCtrl+Dと入力すると、sciptは再開されますが、ルート特権はありません。

    私は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-異なるユーザー使用のファブリック – alecxe

    +0

    'sudo_prefix = 'su - -c''を使用するには、その記事で説明されているようにrootパスワードが必要です。 'sudo_prefix = 'sudo su - -c''私はこのエラーメッセージを受け取りました。「残念ですが、ユーザlocaluserは/ usr/bin/su -c/bin/bash -l -c pwd」を実行できません。 root on hostname.' – Marin

    +0

    'shell = False'を設定しても効果がないようです。'pty = False'を設定すると、' sudo:no tty presentとno askpass program specified 'というエラーが返されます。 – Marin

    答えて

    1

    問題の解決策はいくつかあります。まず、sudoを使ってコマンドを実行したいとします。 runの代わりにruns a shell command on a remote host, with superuser privilegessudo ref)のファブリックメソッドsudoを使用できます。例えば

    、これらのコマンドは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 EDになるようにその必要性を)ラップしたいということです。 Fabricコンテキストマネージャ(ref)を使用してその作業を行うことができます。特に、prefixまたはsettingsを使用できます。例えば

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

    は、rootとしてコマンドを実行し、rootのパスワード一度お伺いします。 パスワードを保存するためにtweek設定を行うことができます。

    +0

    両方の解決策は私のためには機能しません。私は最初のものを試しました。 'sudo( 'pwd')'は 'sudo -S -p 'sudo password:'/bin/bash -l -c" pwd "'に翻訳され、 'Sorry、ユーザlocaluserは、 '/ bin/bash -l -c pwd'をホスト名のrootとして実行することはできません。第2の解決策は、私が私にはないrootパスワードがあることを意味します。 – Marin

    +0

    2番目の解決策では、スーパーユーザーのアクセスに通常使用するパスワードを使用できませんか? – gbozee

    4

    は、あなたと同じ問題に直面した(だけsudo su - user管理者によって許可されたが、sudo -u user -c cmdが許可されていない)、ここではfabricと私のワーキングソリューションです:次のような問題Sorry, user localuser is not allowed to execute '/usr/bin/su - -c /bin/bash -l -c pwd' as root on hostname. することができますのための1つの解決策があり

    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

    0

    試してくださいsudo('mkdir ~/test_fabric',shell=False)。パラメータshellを使用して、bashパラメータ-lを回避します。

    関連する問題