node.js - Ansible 将以什么用户身份运行我的命令?

背景

我的问题看起来很简单,但很快就会变得复杂。

基本上,我真的厌倦了手动维护我的服务器(背景中的尖叫声),我决定是时候找到一种方法让服务器管理员的工作变得更适合生活了。就在那时我发现了 Ansible。很棒吧?确实比为我想要自动化的所有内容编写 bash 脚本(大声尖叫)

有什么问题?

我很难确定我的 Ansible playbook 将以什么用户身份运行某些事情。我还需要能够指定某些任务将以什么用户身份运行。以下是一些具体的用例:

以其他用户身份克隆 repo:

我这样做的目的是从另一个用户运行我的 node.js webapp,我们称之为 bill(只能使用 sudo 来运行我创建的启动 Node 服务器的脚本,而不是可以对所有命令使用 sudo 的 root 或我的用户)。为此,我需要能够让 Ansible 的 git 模块将我的 git repo 克隆为 bill。我该怎么做?

了解 Ansible 将如何获得根:

据我了解,您可以通过定义“用户”和 playbook 文件的开头来设置 Ansible 将连接到您维护的服务器的用户。这是我不明白的:如果我告诉它通过我的用户名 joe 连接,并要求它通过 apt 模块更新包,它将如何获得 root 权限? Sudo 通常会提示我输入密码,我更愿意保持这种方式(出于安全考虑)。

最终请求

我搜索了 Ansible 文档,做了一些(我认为是彻底的)谷歌搜索,通常只是试图自己弄清楚,但这些信息仍然让我难以捉摸。

我对 Ansible 非常陌生,虽然它大多是直截了当的,但如果我能准确了解 Ansible 的运行方式、它在哪些用户上运行,以及我可以如何/在何处指定在不同情况下使用的用户,我会受益匪浅次。

提前谢谢你

最佳答案

您可能会发现阅读 Ansible 文档站点上的主机和用户部分很有用:

http://docs.ansible.com/playbooks_intro.html#hosts-and-users

总之,ansible 将以 remote_user 变量中指定的用户身份运行 playbook 中的所有命令(假设您在此之前使用 ansible >= 1.4, user )。您也可以在每个任务的基础上指定此变量,以防任务需要以特定用户身份运行。

在任何剧本/任务中使用 sudo: true 以使用 sudo 运行它。如果您不想使用 root,请使用 sudo_user 变量指定要 sudo 的用户。

在实践中,我发现以具有 sudo 权限的 deploy 用户身份运行我的 playbook 是最简单的方法。我设置了我的 SSH key ,这样我就可以在不使用密码的情况下以 deploy 的身份通过 SSH 连接到任何主机。这意味着我可以在不使用密码的情况下运行我的剧本,甚至在需要时使用 sudo

我使用同一个用户来做一些事情,比如克隆 git repos 和启动/停止服务。如果服务需要以较低权限的用户身份运行,我让 init 脚本来处理。在 Google 上快速搜索 node.js init.d 脚本后,我们发现了这个适用于 CentOS:

https://gist.github.com/nariyu/1211413

以这种方式做事有助于保持简单,这是我喜欢的。

希望对您有所帮助。

https://stackoverflow.com/questions/21670747/

相关文章:

c++ - 如何在 GDB 中漂亮地打印 STL 容器?

regex - shell脚本中 "=~"运算符的含义

linux - 如何删除 Mercurial 存储库

python - 编译 python 时 --enable-optimizations 做了什么?

php - 在 PHP/Apache/Linux 环境中,为什么 chmod 777 是危险的?

linux - 用户数据脚本未在我的自定义 AMI 上运行,但在标准 Amazon linux 中运

linux - 如果我们想在版本化的源代码中搜索,使用 git grep 比使用普通 grep 更好

linux - Linux 中的直接内存访问

linux - 自动化 Amazon EBS 快照 任何人在 linux 上都有一个好的脚本或解决方

linux - 如何使用 sed 提取子字符串