Fabric Sudo无密码解决方案

pro*_*cle 6 python deployment sudo fabric

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

Ben*_*vis 5

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

重要信息:始终用于sudo visudo修改sudoers文件

Cmnd_Alias RELOAD_SITE = /bin/bash -l -c supervisorctl*, /usr/bin/supervisorctl*
deploy ALL = NOPASSWD: RELOAD_SITE
Run Code Online (Sandbox Code Playgroud)

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

我喜欢保留特定于部署的sudoers配置/etc/sudoers.d/deploy并在最后/etc/sudoers添加:包含该文件includedir /etc/suoders.d.


Jas*_*sch -2

正如 Bartek 还建议的那样,在 sudoers 文件中为部署“用户”启用无密码 sudo。

就像是:

run('echo "{0} ALL=(ALL) ALL" >> /etc/sudoers'.format(env.user))
Run Code Online (Sandbox Code Playgroud)

  • 由于以下几个原因,这实际上并不是一个好方法。首先,每次运行命令时它都会附加这一行。其次,sudoers 文件不应该以这种方式修改。如果 sudoers 文件中存在错误,您可能无法在不手动获取 root 访问权限的情况下再次运行 sudo 命令。 (4认同)