python - Fabric Sudo 无密码解决方案

标签 python deployment sudo fabric

这个问题是关于最佳实践的。我正在使用 Fabric 运行部署脚本。我的部署用户“deploy”需要 sudo 来重启服务。所以我使用 fabric 的 sudo 函数在我的脚本中运行这些命令。这工作正常但在脚本执行期间提示输入密码。我不想在部署期间输入密码。这里的最佳做法是什么。我能想到的唯一解决方案是更改 sudo 权限,以便我的部署用户运行的命令不需要密码。这对我来说似乎不对。

最佳答案

理想的解决方案是在您的服务器上创建一个仅用于部署的用户(例如,deploy)。然后,在您的 fabfile 中设置 env.user=deploy。然后在您的服务器上,您可以在 sudoers 文件中逐个命令地为用户授予必要的权限:

重要:始终使用 sudo visudo 修改 sudoers 文件

Cmnd_Alias RELOAD_SITE = /bin/bash -l -c supervisorctl*, /usr/bin/supervisorctl*
deploy ALL = NOPASSWD: RELOAD_SITE

您可以根据部署用户的需要添加任意数量的 Cmnd_Alias 指令,然后为每个命令授予 NOPASSWD 访问权限。有关详细信息,请参见 man sudoers

我喜欢将特定于部署的 sudoers 配置保存在 /etc/sudoers.d/deploy 中,并通过添加以下内容从 /etc/sudoers 中包含该文件:includedir/etc/suoders.d 最后。

关于python - Fabric Sudo 无密码解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13943349/

相关文章:

ruby-on-rails - Rails Capistrano 3 - 如何将 production.log 文件共享到 Capistrano 的共享文件夹中?

linux - 使用 Linux 功能通过 sudo 运行 ifup 和 ifdown

bash - 在 justfile 中通过 SSH 通过 sudo 以不同用户身份执行命令

python - 如何避免 math.sin(math.pi*2*VERY LARGE NUMBER) 的误差范围比 math.sin(math.pi*2) 大得多?

python - 在 Python 中查找字符串中所有出现的开始和结束位置

python - Django 安装在 django.core 中没有 __init__.py

mongodb - Modulus 上的 Meteor 应用程序——如何重置数据库

c# - 一般而言,Angular 2 和 .Net Core 2.0 应用程序如何相互交互以及开发周期?

node.js - Electron - sudo 命令

python - 令人困惑的 App Engine 数据存储问题 (ListProperty)