我是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"
答案 0 :(得分:1)
看起来您的sudoers文件阻止您以sudo身份运行该命令。检查/ etc / sudoers文件并阅读sudo文档。
另外" -l"不是一个有效的命令。 sudo将-l作为可选标志(列出用户允许的命令)。但Fabric的sudo似乎采用了未知字符串并通过/ bin / bash路由它们,而不是直接将它们用作sudo命令参数。