Python - Using Fabric with Sudo
Question: I'm pretty new to python and fabric and I am trying to do a simple code where
I can get the output on two hosts that uses sudo, although I keep getting an
error.... Can anyone help me out with what I might be missing ?

My code:

    
    
    from fabric.api import *
    from getpass import getpass
    from fabric.decorators import runs_once
    env.hosts = ['host1','host2'] 
    env.port = '22'
    env.user = 'username' 
    env.password="password"
    
    
    def sudo_dsmc(cmd):
        sudo("-l")    
    
    
    When i run: fab sudo_dsmc:"-1" :
    
    MacBookPRO:PYTHON username$ fab sudo_dsmc:"-l"
    [host1] Executing task 'sudo_dsmc'
    [host1] sudo: -l
    [host1] out: sudo password:
    [host1] out: Sorry, user username is not allowed to execute '/bin/bash -l -c -  l' as root on host1.
    [host1] out: 
    

Fatal error: sudo() received nonzero return code 1 while executing!

Requested: -l Executed: sudo -S -p 'sudo password:' /bin/bash -l -c "-l"

Aborting. Disconnecting from host1... done.

Although I can run the apt-get update with my below function fine without any
errors:

    
    
    def sudo_command(cmd):
        sudo("apt-get update")    
    # run like: fab sudo_command:"apt-get-update"
    


Answer: It looks like your sudoers file is preventing you from running that command as
sudo. Check your /etc/sudoers file and read the sudo documentation.

Also "-l" isn't a valid command. sudo takes -l as an optional flag (which
lists commands allowed by the user). But Fabric's sudo appears to be taking
unknown strings and routing them through /bin/bash instead of using them
directly as sudo command parameters.

