Python-通过Sudo使用Fabric

问题描述 投票:1回答:1

我对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更新,而不会出现任何错误:

def sudo_command(cmd):
    sudo("apt-get update")    
# run like: fab sudo_command:"apt-get-update"
python linux bash backup fabric
1个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.