我的问题看起来很简单,但它变得越来越复杂。
基本上,我真的厌倦了手动维护我的服务器(在后台尖叫)我决定是时候找到一种方法让服务器管理员变得更加适合居住。就在那时我找到了Ansible。好吧?当然要为我想要自动化的所有东西制作bash脚本(更响亮的尖叫声)。
我在确定用户的Ansible playbook将运行某些东西时遇到了很多麻烦。我还需要能够指定某些用户运行的用户。以下是一些特定用例:
我的目的是从另一个用户运行我的node.js webapp,我们将其称为 bill (只能使用sudo来运行我创建的启动节点服务器的脚本,而不是root或我的用户可以使用sudo进行所有命令)。要做到这一点,我需要能够让Ansible的git模块克隆我的git repo为 bill 。我该怎么做?
据我了解,您可以通过定义'user'和playbook文件的开头来设置Ansible将连接到您正在维护的服务器的用户。这是我不明白的:如果我通过我的用户名 joe 告诉它,并要求它通过apt模块更新包,它将如何获得root权限? Sudo通常会提示我输入密码,我宁愿保持这种方式(为安全起见)。
我已经搜索了Ansible文档,做了一些(我认为是彻底的)谷歌搜索,并且通常只是试图自己解决这个问题,但这些信息仍然无法实现。
我对Ansible非常新,虽然它大多是直接前进的,但如果我能够准确理解Ansible的运行方式,运行的用户以及我在何处/何处可以指定在不同的用户使用次。
提前谢谢你
答案 0 :(得分:48)
您可能会发现阅读Ansible文档站点上的“主机和用户”部分很有用:
http://docs.ansible.com/playbooks_intro.html#hosts-and-users
总之,ansible将按照remote_user
变量中指定的用户运行剧本中的所有命令(假设您之前使用的是ansible> = 1.4,user
)。您也可以在每个任务的基础上指定此变量,以防任务需要以某个用户身份运行。
在任何Playbook /任务中使用sudo: true
来使用sudo
来运行它。如果您不想使用sudo_user
,请使用root
变量指定要sudo的用户。
在实践中,我发现最简单的方法是将我的Playbook作为具有sudo权限的deploy
用户运行。我设置了SSH密钥,因此我可以在不使用密码的情况下以deploy
的身份SSH到任何主机。这意味着我可以在不使用密码的情况下运行我的Playbook,如果需要,甚至可以使用sudo
。
我使用同一个用户来执行克隆git repos和启动/停止服务等操作。如果服务需要以较低权限的用户身份运行,我让init脚本负责处理。快速谷歌搜索node.js init.d脚本为CentOS揭示了这个:
https://gist.github.com/nariyu/1211413
以这种方式做事有助于保持简单,我喜欢。
希望有所帮助。
答案 1 :(得分:5)
我的2美分:
~/.ansible.cfg
选择root。您可以通过playbooks指定不同的情况和不同的用户或sudo。
Playbook定义哪些角色将运行到属于所选库存的每台计算机。
我建议您阅读Ansible best practices,了解有关如何设置基础架构的一些说明。
哦,顺便说一句,因为你没有提到ansible使用的特定模块而你的问题与python无关,那么我没有找到任何使用python标签的问题。
答案 2 :(得分:4)
请注意,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