与AWS ec2

时间:2016-01-02 19:05:34

标签: ssh amazon-ec2 ansible ansible-playbook

场景是:

  • AWS Ec2实例有两个用户,即root和ubuntu。根本不是 建议,但AWS建议使用ubuntu作为默认值 用户和此用户拥有所有sudo权限。
  • Ansible的控制机器在Ec2实例上运行。 ansible playbook引导另一个Ec2实例并在其上安装某些软件。
  • Nodejs web app从root用户触发此ansible脚本。

    当ansible和nodejs的所有文件都保存在同一文件夹中时,设置很有效。但是当组织在不同的文件夹中时,会给出ansible ssh-error。

错误:

  • 因此,当组织在单独的文件夹中时。 nodejs app触发ansible脚本。新的Ec2实例是自举的,但是当SSH端口准备就绪时,无法安装所需的软件,因为它会给出ssh权限被拒绝错误。
  • 触发ansible脚本的nodejs代码作为

    执行
      child.exec("ansible playbook ../playbook.yml");
    

    在组织到文件夹后,代码中唯一的变化是添加了“../”路径。

调试:

  • 正如我告诉你的那样,EC2实例中有两个用户,即ec2-key模块,而bootstrapping将root用户的ssh-key存储到新引导的实例中。但是,在新引导的实例上安装软件时,ubuntu的ssh = key用于获取访问权限。因此,与密钥的冲突会给出ssh-permission denied错误。并且,在将ansible文件和nodejs文件组织到单独的文件夹之后,尤其会发生此错误。如果所有ansible和nodejs文件都放在同一个文件夹中,则不会引发错误。仅供参考:所有文件都存储在ubuntu用户中。

对此感到困惑!!提前谢谢。

1 个答案:

答案 0 :(得分:0)

正如@udondan所说,将cwd添加到exec函数中。