什么用户将Ansible运行我的命令?

Mic*_*ael 46 linux git node.js ansible

背景

我的问题似乎很简单,但它变得越来越复杂.

基本上,我真的厌倦了手动维护我的服务器(在后台尖叫),我觉得是时候找到一种方法让服务器管理员更加适宜居住.就在那时我找到了Ansible.好吧?当然要为我想要自动化的一切制作bash脚本(更响亮的尖叫).

有什么问题?

我很难搞清楚我的Ansible playbook会运行某些东西的用户.我还需要能够指定某些用户运行的用户.以下是一些特定用例:

将repo克隆为另一个用户:

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

知道Ansible将如何获得根源:

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

最后的要求

我已经搜索了Ansible文档,完成了一些(我认为是彻底的)谷歌搜索,并且通常只是试图自己弄清楚,但这些信息仍然让我无法理解.

我是Ansible的新手,虽然它主要是直接前进,但如果我能够准确理解Ansible的运行方式,运行的用户以及我在何时/何处可以指定在不同时间使用的用户,我将会受益匪浅.

提前谢谢你

mja*_*son 51

您可能会发现阅读Ansible文档站点上的Hosts and Users部分很有用:

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

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

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

在实践中,我发现以deploy具有sudo权限的用户运行我的playbook最容易.我设置了SSH密钥,因此我可以在deploy不使用密码的情况下通过SSH连接到任何主机.这意味着我可以在不使用密码的情况下运行我的剧本,甚至可以sudo在需要时使用.

我使用同一个用户来执行克隆git repos和启动/停止服务等操作.如果服务需要以较低权限的用户身份运行,我让init脚本负责处理.快速谷歌搜索node.js init.d脚本为CentOS揭示了这个:

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

这样做有助于保持简单,我喜欢.

希望有所帮助.

  • 我还发现了这个:https://gist.github.com/marktheunissen/2979474 我发现它非常有用,虽然它很长,但我建议阅读它,它确实以一种易于理解的方式分解了 Ansible 的工作原理。 (2认同)

Jim*_*ane 6

我的2美分:

  1. Ansible使用您的本地用户(例如Mike)ssh到远程计算机.(这要求迈克能够ssh到机器)
  2. 从那里它可以根据需要更改为远程用户
  3. 如果需要,它也可以sudo,如果迈克被允许.如果未指定用户,则将通过~/.ansible.cfg您本地计算机上的root选择root .
  4. 如果你为remote_user提供了sudo param,那么就像no.3一样,它不会使用root用户.

您可以通过剧本指定不同的情况和不同的用户或sudo .

Playbook定义哪些角色将运行到属于所选库存的每台机器中.

我建议您阅读Ansible最佳实践,以获取有关如何设置基础结构的一些说明.

哦,顺便说一句,因为你没有提到ansible使用的特定模块,你的问题与python无关,那么我没有找到任何使用python标签的问题.