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

背景

我的问题似乎很简单,但它变得非常复杂。

基本上,我真的很厌倦了手动维护我的服务器(尖叫在后台) ,我决定是时候find一种方法,使服务器pipe理员更宜居。 那时候我find了Ansible。 很棒吧? 当然,我打算让自动化的东西制作bash脚本(大声尖叫)

有什么问题?

我有很多的麻烦,搞清楚我的个人剧本会运行什么东西。 我也需要能够指定哪些用户将运行特定的任务。 以下是一些具体的用例:

克隆回购作为另一个用户:

我的目的是,它运行我的node.js webapp从另一个用户,我们会叫bill (这只能使用sudo来运行我启动节点服务器的脚本,而不是根或我的用户,可以所有命令都使用sudo)。 要做到这一点,我需要能够让Ansible的git模块克隆我的git回购账单 。 我该怎么做?

了解Ansible将如何获得根源:

据我所知,你可以设置什么用户Ansible将连接到你正在维护的服务器,通过定义“用户”和剧本文件的开始。 下面是我不明白的:如果我通过我的用户名joe告诉它,并通过apt模块更新一个包,它将如何获得root权限? Sudo通常会提示我input密码,我宁愿保持这种状态(为了安全起见)。

最后的要求

我已经search了Ansible文档,做了一些(我认为是彻底的)search,一般只是试图找出自己的,但这些信息继续排除我。

对Ansible来说,我是一个非常新的人物,虽然这很简单,但是如果我能够明确地理解运行的用户,运行的用户以及我可以在不同的时间指定用户的方式,我将会受益匪浅。

提前谢谢你

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

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

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

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

在实践中,我发现以具有sudo权限的deploy用户运行我的playbook是最容易的。 我设置了我的SSH密钥,这样我就可以在不使用密码的情况下通过SSH进入任何主机。 这意味着我可以在不使用密码的情况下运行我的手册,甚至在需要时使用sudo

我使用这个相同的用户来做克隆git回购和开始/停止服务的东西。 如果一个服务需要作为一个权限较低的用户运行,我让init脚本来处理这个问题。 快速谷歌searchnode.js init.d脚本显示了这一个CentOS的:

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

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

希望有所帮助。

我的2美分:

  1. Ansible使用您的本地用户(例如Mike)ssh到远程机器。 (这需要麦克能够ssh到机器)
  2. 从那里它可以改变到一个远程用户,如果需要的话
  3. 它也可以sudo如果需要,如果迈克是允许的。 如果没有指定用户,那么将通过本地机器上的~/.ansible.cfg来selectroot。
  4. 如果你提供了一个远程用户的sudo参数,然后像no.3它不会使用root用户。

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

Playbook定义了哪些angular色将运行到属于所选广告资源的每台机器中。

我build议你阅读Ansible最佳实践 ,了解如何设置基础设施的一些解释。

哦,顺便说一句,因为你不是指一个特定的模块,使用和你的问题是不相关的python,那么我没有发现任何使用你的问题有python标签。

请注意,Ansible> = 1.9使用特权升级命令,因此如果需要,您可以执行任务并创build与次级用户相关的资源:

 - name: Install software shell: "curl -s get.dangerous_software.install | sudo bash" become_user: root 

http://docs.ansible.com/ansible/become.html#become-privilege-escalation