Сценарий: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.
Просто озадаченный этим! Заранее спасибо.
Вы используете пользовательский 'ansible.cfg'? Я думаю, что единственным файлом, который Ansible будет использовать относительно текущего рабочего каталога, а не относительно playbook, является 'ansible.cfg'. Поэтому, если кто-то будет присутствовать в вашей незаменимой папке, он не будет использоваться, если вызван из другого рабочего каталога. Для решения вы пытались изменить текущий рабочий каталог в своем дочернем процессе? 'child.exec (" ansible playbook playbook.yml ", {cwd:" .. "});' – udondan
Я не пробовал {cwd: ""}. Но у меня есть сильное чувство для ansible.cfg. Во время организации каталогов позвольте мне попробовать поставить ansible.cfg только в файлах nodejs. Будет держать вас в курсе прогресса. –