Python-将Fabric与Sudo结合使用

Python-将Fabric与Sudo结合使用,python,linux,bash,backup,fabric,Python,Linux,Bash,Backup,Fabric,我对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

我对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”

虽然我可以使用下面的函数运行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命令参数。

感谢您的响应,我注意到当我使用:run(“sudo-l”)而不是sudo(-l”)时,它确实起作用。不过,它最终会提示输入密码。不过,它会在为每个主机输出之前提示输入密码。您知道运行(“sudo-l”)时会提示输入密码吗?您可以使用ssh密钥设置无密码登录。谷歌搜索“ssh无密码登录”,你会发现许多页面详细说明如何配置它。
def sudo_command(cmd):
    sudo("apt-get update")    
# run like: fab sudo_command:"apt-get-update"