在我的 /etc/sudoers
我有:
# Allow the picky user to restart its own gunicorn process
picky ALL=(ALL) NOPASSWD: /usr/bin/supervisorctl restart picky
我确实可以从挑剔的用户那里运行这个命令:
$ su picky
$ sudo supervisorctl restart picky
在我的 fabfile.py 中有以下内容:
from fabric.api import sudo
def restart():
sudo("supervisorctl restart picky")
但是,当我运行我的结构文件时,它仍然提示输入密码:
[picky@myhost] sudo: supervisorctl restart picky
[picky@myhost] out: sudo password:
如何在 Fabric 中运行 sudo 命令而不需要提供密码?
编辑:
我注意到这个有效:
from fabric.api import run
def restart():
run("sudo supervisorctl restart picky")
最佳答案
如 https://stackoverflow.com/questions/3737003/can-i-prevent-fabric-from-prompting-me-for-a-sudo-password 中所述,当您使用 fabric sudo
命令时,该命令将发送到 shell。执行的实际命令包含对 /bin/bash
的调用,这就是它与您的 sudoer 条目不匹配的原因。
要解决这个问题,只需将 shell=False
添加到您的调用中:
from fabric.api import sudo
def restart():
sudo("supervisorctl restart picky", shell=False)
您可能必须将完整路径添加到 supervisorctl
。
关于python - 从 fabric 调用/etc/sudoers 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18602232/