首页 文章

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

提问于
浏览
43

背景

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

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

有什么问题?

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

将repo克隆为另一个用户:

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

知道Ansible将如何获得根:

据我了解,你可以设置用户Ansible将连接到服务器的用户're maintaining by defining '用户' and the beginning of the playbook file. Here' s我不明白:如果我告诉它通过我的用户名连接joe,并要求它通过更新包apt模块,它将如何获得root权限? Sudo通常会提示我输入密码,我宁愿保持这种方式(为了安全起见) .

最终请求

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

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

提前谢谢你

3 回答

  • 4

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

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

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

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

    在实践中,我发现最简单的方法是将我的Playbook作为具有sudo权限的 deploy 用户运行 . 我设置了SSH密钥,因此我可以在不使用密码的情况下通过SSH连接到任何主机 deploy . 这意味着我可以在不使用密码的情况下运行我的Playbook,如果需要,甚至可以使用 sudo .

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

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

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

    希望有所帮助 .

  • 5

    我的2美分:

    • Ansible使用您的本地用户(例如Mike)ssh到远程计算机 . (这要求迈克能够ssh到机器)

    • 如果需要,可以从那里更改为远程用户

    • 如果需要,它也可以sudo,如果麦克被允许的话 . 如果未指定用户,则将通过本地计算机上的 ~/.ansible.cfg 选择root .

    • 如果你提供一个带有sudo param的remote_user,那么就像no.3一样,它不会使用root用户 .

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

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

    我建议您阅读Ansible best practices,了解有关如何设置基础架构的一些说明 .

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

  • 48

    只需注意Ansible> = 1.9使用权限提升命令,这样您就可以执行任务并创建资源,如果需要,可以使用辅助用户:

    - 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

相关问题