【发布时间】:2016-04-06 19:04:04
【问题描述】:
场景是:
- AWS Ec2 实例有两个用户,即 root 和 ubuntu。根不是 可取,但 AWS 建议使用 ubuntu 作为默认值 用户并且此用户拥有所有 sudo 权限。
- Ansible 的控制机器在 Ec2 实例上运行。 ansible playbook 引导另一个 Ec2 实例并在其上安装某些软件。
-
Nodejs Web 应用程序从 root 用户触发这个 ansible 脚本。
当 ansible 和 nodejs 的所有文件都保存在同一个文件夹中时,该设置运行良好。但是当组织在不同的文件夹中时,会给出 ansible ssh-error。
错误:
- 因此,当组织在单独的文件夹中时。 nodejs 应用程序触发 ansible 脚本。新的 Ec2 实例已启动,但当 SSH 端口准备就绪时,无法安装所需的软件,因为它给出了 ssh 权限被拒绝错误。
-
触发ansible脚本的nodejs代码执行为
child.exec("ansible playbook ../playbook.yml");整理成文件夹后,代码中唯一的变化是添加了“../”路径。
调试:
- 正如我告诉您的,EC2 实例中有两个用户,即引导时的 ec2-key 模块将 root 的 ssh-key 存储到新引导的实例中。但是,在新引导的实例上安装软件时,ubuntu 的 ssh=key 用于获取访问权限。因此,与密钥的冲突会导致 ssh-permission denied 错误。并且,在将 ansible 文件和 nodejs 文件组织到单独的文件夹中之后,尤其会发生此错误。如果所有 ansible 和 nodejs 文件都放在同一个文件夹中,则不会引发错误。仅供参考:所有文件都存储在 ubuntu 用户中。
只是对此感到困惑!提前致谢。
【问题讨论】:
-
您使用自定义
ansible.cfg吗?我认为 Ansible 将使用的唯一相对于当前工作目录而不是相对于 playbook 的文件是ansible.cfg。因此,如果一个存在于您的 ansible 文件夹中,则如果从另一个工作目录调用它将不会被使用。对于解决方案,您是否尝试更改子进程中的当前工作目录?child.exec("ansible playbook playbook.yml", {cwd: ".."}); -
我还没试过 {cwd: ""}。但我对 ansible.cfg 有强烈的感觉。在组织目录时,让我尝试将 ansible.cfg 单独放在 nodejs 文件中。将让您了解最新进展。
标签: ssh amazon-ec2 ansible ansible-playbook