我对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”
中止。
正在断开与主机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命令参数。

关于python - Python-将Fabric与Sudo一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33380310/

10-15 15:56