【问题标题】:ssh-error when using ansible with AWS ec2将 ansible 与 AWS ec2 一起使用时出现 ssh 错误
【发布时间】: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


【解决方案1】:

正如@udondan 所说,将 cwd 添加到 exec 函数是有效的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 2018-06-16
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 2015-02-17
    • 2017-08-15
    相关资源
    最近更新 更多