我对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"
似乎您的sudoers文件阻止您以sudo身份运行该命令。检查/ etc / sudoers文件并阅读sudo文档。
也是“ -l”也是无效命令。 sudo将-l作为可选标志(列出用户允许的命令)。但是,Fabric的sudo似乎正在获取未知的字符串并通过/ bin / bash路由它们,而不是直接将它们用作sudo命令参数。