【问题标题】:Python - Using Fabric with SudoPython - 将 Fabric 与 Sudo 一起使用
【发布时间】:2015-10-27 23:28:26
【问题描述】:

我对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】:

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

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

    【讨论】:

    • 感谢您的回复,我注意到当我使用: run("sudo -l") 而不是 sudo("-l") 它确实有效。虽然,它最终会提示输入密码。虽然,它会在为每个主机输出之前提示输入密码。你知道是否无论如何都可以使用 run("sudo -l") 并提示输入密码?
    • 您可以使用 ssh 密钥设置无密码登录。谷歌“ssh passwordless login”,你会发现很多页面详细说明了如何配置它。
    猜你喜欢
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    相关资源
    最近更新 更多