2016-01-02 11 views
0

Сценарий:SSH-ошибка при использовании анзибль с AWS EC2

  • AWS EC2 экземпляры имеют два пользователя, а именно корень и убунту. root не рекомендуется , но AWS рекомендует использовать ubuntu в качестве пользователя по умолчанию , и этот пользователь имеет все разрешения sudo.
  • Контрольная машина Ansible работает на экземпляре Ec2. Незабудительная игра загружает другой экземпляр Ec2 и устанавливает на них определенные программные средства.
  • Веб-приложение Nodejs запускает эти незаменимые скрипты от пользователя root.

    Настройка работает хорошо, когда все файлы для доступа и nodejs хранятся в одной папке. Но когда организовано в другую папку, вы получаете незаменимую ssh-ошибку.

Ошибка:

  • Так что, когда организованы в отдельных папках. Приложение nodejs запускает невидимые скрипты. Новый экземпляр Ec2 загружается, но когда SSH-порт готов, не удается установить требуемое программное обеспечение, поскольку оно дает отказ в разрешении ssh.
  • Код nodejs, который запускает анзибль сценарии выполняется как

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

    Единственное изменение в коде, после организации в папки является добавление «../» путь.

Debugging:

  • Как я говорил, есть два пользователя, в случае EC2, то ec2 ключа модуль во время начальной загрузки хранит SSH-ключ корневого для вновь вытаскивающих себя за волосами, например. Но при установке программного обеспечения на вновь загрунтованном экземпляре используется ssh = ubuntu для доступа. Таким образом, конфликты с ключами дают отклоненную ssh-разрешенную ошибку. И эта ошибка возникает, особенно, после организации файлов-файлов и файлов nodejs в отдельные папки. Если все файлы ansible и nodejs помещаются в одну и ту же папку, то ошибка не возникает. FYI: все файлы хранятся в пользователе ubuntu.

Просто озадаченный этим! Заранее спасибо.

+1

Вы используете пользовательский 'ansible.cfg'? Я думаю, что единственным файлом, который Ansible будет использовать относительно текущего рабочего каталога, а не относительно playbook, является 'ansible.cfg'. Поэтому, если кто-то будет присутствовать в вашей незаменимой папке, он не будет использоваться, если вызван из другого рабочего каталога. Для решения вы пытались изменить текущий рабочий каталог в своем дочернем процессе? 'child.exec (" ansible playbook playbook.yml ", {cwd:" .. "});' – udondan

+0

Я не пробовал {cwd: ""}. Но у меня есть сильное чувство для ansible.cfg. Во время организации каталогов позвольте мне попробовать поставить ansible.cfg только в файлах nodejs. Будет держать вас в курсе прогресса. –

ответ

0

Как сказал @udondan, добавление cdd к функции exec работает.

Смежные вопросы