Python - 使用Sudo的Fabric

时间:2015-10-27 23:28:26

标签: 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 = '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: 

致命错误:sudo()在执行时收到非零返回码1

要求:-l 执行:sudo -S -p'sudo密码:'/ bin / bash -l -c“-l”

中止。 断开与host1的连接...完成。

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

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

1 个答案:

答案 0 :(得分:1)

看起来您的sudoers文件阻止您以sudo身份运行该命令。检查/ etc / sudoers文件并阅读sudo文档。

另外" -l"不是一个有效的命令。 sudo将-l作为可选标志(列出用户允许的命令)。但Fabric的sudo似乎采用了未知字符串并通过/ bin / bash路由它们,而不是直接将它们用作sudo命令参数。