Python - 将 Fabric 与 Sudo 结合使用
Python - Using Fabric with Sudo
我是 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 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 和 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 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 命令参数。