Подтвердить что ты не робот

Какой пользователь Ansible выполнит мои команды как?

Фон

Мой вопрос кажется простым, но он становится более сложным очень быстро.

В принципе, я действительно устал поддерживать мои серверы вручную (кричит в фоновом режиме), и я решил, что пришло время найти способ сделать администратор сервера более пригодным для жизни. Это когда я нашел Ansible. Отлично? Конечно, биты делают bash скрипты (громкий крик) для всего, что я хотел автоматизировать.

Какая проблема?

У меня много проблем с выяснением того, какой пользователь может использовать некоторые мои игры. Мне также нужна возможность указать, какой пользователь будет выполнять определенные задачи. Вот некоторые конкретные варианты использования:

Клонирование репо в качестве другого пользователя:

Моя цель заключается в том, что он запускает мой node.js webapp от другого пользователя, который мы будем называть счетом (который может использовать только sudo для запуска script, который я создал, который запускает сервер node в отличие от root или моего пользователя, который может использовать sudo для всех команд). Для этого мне нужна возможность иметь модуль Ansible git для клонирования моего репозитория git в качестве счета. Как мне это сделать?

Зная, как Ansible получит root:

Насколько я понимаю, вы можете установить, какой пользователь Ansible будет подключаться к серверу, который вы поддерживаете, определяя "пользователь" и начало файла плей-листа. Вот что я не понимаю: если я скажу ему подключиться через мое имя пользователя, joe и попросить его обновить пакет через apt-модуль, как он получит root? Судо обычно запрашивает у меня мой пароль, и я бы предпочел сохранить его таким образом (для обеспечения безопасности).

Заключительный запрос

Я просмотрел документы Ansible, сделал некоторые (то, что я думал, был полностью) Googling, и вообще просто пытался разобраться в этом сам, но эта информация продолжает меня освещать.

Я очень новичок в Ansible, и, хотя он в основном прямолинейный, мне бы очень понравилось, если бы я мог точно понять, насколько безопасны пробежки, на которых они запускаются, и как/где я могу указать, какой пользователь использовать для разных раз.

Спасибо за тонну заранее

4b9b3361

Ответ 1

Вы можете счесть полезным прочитать раздел "Хосты и пользователи" на сайте "Документация по Ansible":

http://docs.ansible.com/playbooks_intro.html#hosts-and-users

Таким образом, ansible будет запускать все команды в playbook как пользователь, указанный в переменной remote_user (при условии, что вы используете ansible >= 1.4, user до этого). Вы также можете указать эту переменную для каждой задачи, если задача должна выполняться как определенный пользователь.

Используйте sudo: true в любой playbook/task, чтобы использовать sudo для запуска. Используйте переменную sudo_user, чтобы указать пользователя для sudo, если вы не хотите использовать root.

На практике, я нашел, что проще всего запустить мою книгу как пользователь deploy, обладающий привилегиями sudo. Я установил свои SSH-ключи, поэтому я могу использовать SSH на любом хосте в качестве deploy без использования пароля. Это означает, что я могу запускать свою книгу без использования пароля и даже использовать sudo, если мне нужно.

Я использую этого же пользователя для выполнения таких действий, как клонирование git repos и запуск/остановка сервисов. Если служба должна работать как пользователь с более низким приоритетом, я разрешаю init script позаботиться об этом. Быстрый поиск Google для node.js init.d script показал это для CentOS:

https://gist.github.com/nariyu/1211413

Ведение дел таким образом помогает сохранить его простым, что мне нравится.

Надеюсь, что это поможет.

Ответ 2

Мои 2 цента:

  • Ansible использует вашего локального пользователя (например, Mike) для ssh на удаленном компьютере. (Это потребовало от Майка возможности ssh на машине).
  • Оттуда он может измениться на удаленного пользователя при необходимости
  • Он также может sudo при необходимости, и если Майк разрешен. Если ни один пользователь не указан, root будет выбран с помощью ~/.ansible.cfg на вашей локальной машине.
  • Если вы предоставите remote_user с параметром sudo, то, как и no.3, он не будет использовать root, но этот пользователь.

Вы можете указать разные ситуации и разных пользователей или sudo через playbooks.

Playbook определяет, какие роли будут выполняться на каждой машине, принадлежащей выбранному инвентарю.

Я предлагаю вам прочитать Несовершенные рекомендации для объяснения того, как настроить вашу инфраструктуру.

Oh и btw, так как вы не обращаетесь к определенному модулю, который использует ANS, и ваш вопрос не связан с python, тогда я не считаю, что ваш вопрос имеет тег python.

Ответ 3

Просто обратите внимание, что Ansible >= 1.9 использует команды эскалации привилегий, поэтому вы можете выполнять задачи и создавать ресурсы в качестве этого вторичного пользователя, если это необходимо:

- name: Install software
  shell: "curl -s get.dangerous_software.install | sudo bash"
  become_user: root

http://docs.ansible.com/ansible/become.html#become-privilege-escalation