出身背景

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

基本上,我已经厌倦了手动维护我的服务器,我决定是时候找到一种方法,让服务器管理员更适合生活了.就在那时我找到了Ansible.很好啊?当然比为我想自动化的所有东西制作bash脚本(louder scream)要好得多.

有什么问题吗?

我很难弄清楚我的Ansible playbook将以什么用户的身份运行某些东西.我还需要能够指定某些任务将作为什么用户运行.以下是一些特定的用例:

将回购协议克隆为另一个用户:

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

知道Ansible将如何扎根:

据我所知,您可以通过定义"用户"和playbook文件的开头来设置Ansible将连接到您维护的服务器的用户.以下是我不明白的:如果我告诉它通过我的用户名joe连接,并要求它通过apt模块更新包,它将如何获得根?Sudo通常会提示我输入密码,为了安全起见,我更愿意这样保存.

最后请求

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

我对Ansible非常陌生,虽然它基本上是直截了当的,但如果我能确切地了解Ansible是如何运行的,它在哪些用户上运行,以及如何/在哪里指定在不同时间使用哪个用户,我将受益匪浅.

提前谢谢

推荐答案

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

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

In summary, ansible will run all commands in a playbook as the user specified in the remote_user variable (assuming you're using ansible >= 1.4, user before that). You can specify this variable on a per-task basis as well, in case a task needs to run as a certain user.

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

实际上,我发现以拥有sudo权限的deploy用户身份运行playbook是最简单的.我设置了我的SSH密钥,这样我就可以在不使用密码的情况下以deploy的身份SSH到任何主机.这意味着我可以不用密码运行我的playbook,如果需要,甚至可以使用sudo.

我使用这个用户来做一些事情,比如克隆git repos和启动/停止服务.如果一个服务需要以低特权用户的身份运行,我就让init脚本来处理这个问题.在谷歌上快速搜索一个 node .js init.d脚本为CentOS揭示了这一点:

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

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

希望有帮助.

Node.js相关问答推荐

我的位置也移动时左右拖动谷歌 map

如何在node.js中以随机顺序调用函数并按顺序操作

在函数上执行 toString 的Typescript 会产生奇怪的字符 (path_1, (0, Promise.writeFile))

如果我加入另一个公会且我的​​机器人已在其中,欢迎消息发送错误

从mongodb集合中获取每分钟数据的每小时数据

与诗乃一起嘲笑奈克斯

找不到模块bcryptjs

node_modules/preact/src/jsx.d.ts:2145:22 - 错误 TS2304:找不到名称SVGSetElement

当其中一个端点不工作时,如何使用 axios.all() 调用多个 API?

如何使用 node 在 koa.js 中发送响应

AJAX 和 Node JS:在我的服务器中接收空数据

如何从 github 编译第三方扩展?

带权限的机密 Rest-Api - 总是 403 - 我做错了什么?

如何申请在NextJS上下载文件的许可?

node_modules 中 .bin 文件夹的用途是什么?

eslint - vscode 的可选链接错误

如何在 node 调试器中禁用第一行中断

Dart 语言比 JavaScript (Node.js) 有什么好处

在单独的模块中定义 Mongoose 模型

未在 Windows 8.1 上构建的 node 包 - 缺少 Microsoft.Cpp.Default.props