Запуск задачи Ansible от имени конкретного пользователя

23

Я пытаюсь запустить определенную задачу Ansible от имени другого пользователя, нежели тот, кто запускает playbook. Мой .ymlфайл выглядит так:

---

- hosts: staging_servers
  tasks:    
    - name: check user
      remote_user: someusername
      shell: whoami

Выполнение этой задачи показывает мне, что whoamiкоманда возвращает пользователя, отличного от того, которого я определил в задаче (точнее, возвращает пользователя, определенного в hostsвызываемом файле ubuntu).

Я также попытался определить задачу следующим образом:

---

- hosts: staging_servers
  tasks:
    - name: check user
      sudo: yes
      sudo_user: someusername
      shell: whoami

но затем я получаю Missing sudo passwordошибку ' ', хотя в sudoersфайле есть строка, в которой говорится someusername ALL=(ALL) NOPASSWD:ALLи выдает команды sudoна удаленной машине, так как someusernameне запрашивает у меня пароль.

Итак, как я могу запустить определенную задачу от имени другого пользователя, который не определен в hostsфайле или в rootсамом себе?

описки
источник

Ответы:

19

Вы неправильно понимаете обе настройки:

  • remote_user - это параметр Ansible, управляющий SSH-пользователем, который Ansible использует для подключения:ssh ${REMOTE_USER}@remotehost

  • someusername ALL = (ALL) NOPASSWD: ALL - это конфигурация sudo, которая позволяет пользователю someusernameвыполнять все команды на любом хосте без пароля. Это не позволяет никому давать команды, как someusernameесли бы.

В идеале вы должны войти в систему как правильный пользователь, и это remote_userвсе. Но обычно вы можете войти в систему только как администратор (скажем, ubuntu) и использовать команды sudo как другой пользователь (скажем scrapy). Затем вы должны оставить remote_userпользователю, который входит в систему, и добавить следующие заданные свойства в работу:

- name: log in as ubuntu and do something as scrapy
  remote_user: ubuntu
  sudo: true
  sudo_user: scrapy
  shell: do-something.sh
Capi Etheriel
источник
1
Понимаю. Большое спасибо за разъяснение этого! Но как запустить конкретную задачу от имени конкретного пользователя?
опечатки
1
Обратите внимание, что по remote_userумолчанию используется текущий пользователь на вашем локальном компьютере - так же, как и ssh.
Capi Etheriel
Хорошо, но с такой настройкой я все равно получаю Missing sudo passwordошибку ' '. Есть ли способ избежать запроса пароля для этого конкретного пользователя?
опечатки
Я думаю, что нашел ответ, добавив строку к sudoers:, ubuntu ALL=(someusername) NOPASSWD: ALLно я должен подумать о безопасности, стоящей за этим ... Есть ли другой способ, кроме добавления этой строки к sudoers?
Ошибки
1
правильный способ - позволить удаленному пользователю войти в систему напрямую.
Capi Etheriel
16

Обратите внимание , что после того, как анзибль 1.9, то sudoформулировка была заменена become, таким образом ,

sudo: yes
sudo_user: some_user

становится (каламбур):

become: yes
become_user: some_user

Подробности смотрите здесь: /programming//a/22749788/402727

экс-ботаник
источник