Python - 将 Fabric 与 Sudo 结合使用

Python - Using Fabric with Sudo

我是 python 和 fabric 的新手,我正在尝试编写一个简单的代码,我可以在使用 sudo 的两台主机上获得输出,尽管我不断收到错误....谁能帮我解决我可能遗漏的问题?

我的代码:

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")    

当我 运行: 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.

虽然我可以运行 apt-get update 我的下面的函数没有任何错误:

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

您的 sudoers 文件似乎阻止您 运行 该命令作为 sudo。检查您的 /etc/sudoers 文件并阅读 sudo 文档。

“-l”也不是有效命令。 sudo 将 -l 作为可选标志(列出用户允许的命令)。但是 Fabric 的 sudo 似乎正在获取未知字符串并通过 /bin/bash 路由它们,而不是直接将它们用作 sudo 命令参数。