2013-02-27 31 views
5

Birkaç sunucuda gerçekleştirdiğim bazı yönetimsel işleri otomatikleştirmek için kumaş kullanmaya çalışıyorum. Genel akışı şöyledir: yerel kullanıcı ileKumaş komut dosyalarını root olarak çalıştırma

  1. SSH
  2. çalışma: sudo su - Maalesef

:)

  • root olarak iş yap (yine yerel kullanıcı şifresini sağlayarak) kök olmak run('sudo su -') kullanarak komut dosyalarının yürütülmesini engeller ve kullanıcı girişine izin verir. Ben exit veya Ctrl+D yazdığımda, script devam eder, ancak root ayrıcalıkları olmadan.

    Ben Switching user in Fabric da benzer bir problem gördük ama aşağıdaki satırı içeren /etc/sudoers dosyayı değiştirmesine izin verilmez, çünkü biraz sudo su - sınırlı am: Ben çalışırken kumaşın kaynağını göz

    localuser ALL = /usr/bin/su -

    bir geçici çözüm bulmak için ama hiçbir başarı ile.

  • +0

    http://docs.fabfile.org/en/1.4.2/usage/env.html#sudo-prefix adresine bakın ve bu örnek: http://stackoverflow.com/questions/12641514/switch- to-different-user-using-fabric – alecxe

    +0

    Kullanarak 'sudo_prefix = 'su - -c'', bu yayında belirtildiği gibi kök parola gerektirir. Eğer sudo_prefix = 'sudo su - -c' kullanırsam bu hata mesajını alıyorum 'Üzgünüz, kullanıcı localuser'/usr/bin/su - -c/bin/bash -l -c pwd 'olarak çalıştırılamıyor hostname üzerinde ' – Marin

    +0

    'shell = False' ayarının hiçbir etkisi yoktur.'Pty = False 'ayarı,' sudo: no tty present' ve 'requestpass programı belirtilmediyse' hatasını döndürür ' – Marin

    cevap

    1

    Sorununuz için çeşitli çözümler vardır. İlk olarak, sudo'u kullanarak komutları çalıştırmak istiyorsunuz. runs a shell command on a remote host, with superuser privileges (sudo ref) run yerine sudo kumaş yöntemini kullanabilirsiniz.

    Örneğin, bu komutlar sudo kullanılarak yürütülür:

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

    Başka bir fikir komut kümesi (sudo ed olmaya bu ihtiyacı) sarmak istiyorum olmasıdır. Bunu yapmak için Fabric context yöneticilerini (ref) kullanabilirsiniz. Özellikle, prefix veya settings'u kullanabilirsiniz. Örneğin

    : Kök şifresi sonra kök olarak komutları yürütmek kez

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

    isteyecektir. Parolayı saklamak için ayarları değiştirebilirsiniz.

    +0

    Her iki çözüm de benim için çalışmaz. Sudo -S -p 'sudo şifresi:'/bin/bash -l -c 'pwd' 've bir hata mesajı alıyorum ilk soruyu denedim ve' sudo ('pwd') '' user localuser, '/ bin/bash -l -c pwd' komutunu hostname üzerinde root olarak çalıştırmasına izin verilmiyor. İkinci çözümler, benim sahip olmadığım root şifresine sahip olduğumu ima ediyor. – Marin

    +0

    İkinci çözüm için, süper kullanıcı erişimini almak için normalde kullanacağınız şifreyi kullanamaz mıyım? – gbozee

    4

    , sizinkiyle aynı sorunla karşı karşıya olan (sadece sudo su - user yönetici tarafından izin verilen, sudo -u user -c cmd izin verilmez), burada fabric ile benim çalışma çözüm: Aşağıdaki sorunu Sorry, user localuser is not allowed to execute '/usr/bin/su - -c /bin/bash -l -c pwd' as root on hostname. yapabilirsiniz için bir çözüm var

    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

    Bu iyi bir çözüm gibi görünüyor, ancak uzak makinede python olmasını gerektirir. – jchysk

    0

    sudo('mkdir ~/test_fabric',shell=False)'u deneyin. Bash param -l önlemek için shell parametresini kullanarak.

    İlgili konular