Executando a tarefa Ansible como um usuário específico

23

Estou tentando executar uma tarefa Ansible específica como um usuário diferente daquele que está executando o manual. Meu .ymlarquivo fica assim:

---

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

A execução desta tarefa mostra que o whoamicomando retorna um usuário diferente do que eu defini na tarefa (precisamente, retorna o usuário definido no hostsarquivo chamado ubuntu).

Eu também tentei definir a tarefa assim:

---

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

mas depois recebo o Missing sudo passworderro ' ', embora exista uma linha no sudoersarquivo que diga someusername ALL=(ALL) NOPASSWD:ALLe emita comandos sudona máquina remota, pois someusernamenão me pede uma senha.

Então, como posso executar a tarefa específica como um usuário diferente, que não é o usuário definido no hostsarquivo ou rootele próprio?

errata
fonte

Respostas:

19

Você está entendendo errado as duas configurações:

  • remote_user é uma configuração Ansible que controla o usuário SSH que Ansible está usando para conectar:ssh ${REMOTE_USER}@remotehost

  • someusername ALL = (ALL) NOPASSWD: ALL é uma configuração sudo que permite ao usuário someusernameexecutar todos os comandos em qualquer host sem uma senha. Não permite que ninguém emita comandos como someusernamese.

Idealmente, você entraria diretamente como o usuário certo e é isso que remote_userimporta. Mas normalmente você só pode fazer login como usuário administrativo (por exemplo ubuntu) e ter que sudo command como outro usuário (por exemplo scrapy). Em seguida, você deve deixar remote_userpara o usuário que efetua login e adicionar as seguintes propriedades ansible ao trabalho:

- name: log in as ubuntu and do something as scrapy
  remote_user: ubuntu
  sudo: true
  sudo_user: scrapy
  shell: do-something.sh
Capi Etheriel
fonte
1
Entendo. Muito obrigado por esclarecer isso! Mas como executar uma tarefa específica como um usuário específico, então?
errata
1
Observe que o remote_userpadrão é o usuário atual em sua máquina local - exatamente como o ssh faz.
Capi Etheriel 26/01
Tudo bem, mas com uma configuração como essa ainda recebo Missing sudo passwordo erro ' '. Existe uma maneira de evitar solicitar senha para esse usuário específico?
errata
Acho que encontrei a resposta, adicionando a linha aos sudoers:, ubuntu ALL=(someusername) NOPASSWD: ALLmas tenho que pensar na segurança por trás disso ... Existe outra maneira, exceto adicionar essa linha aos sudoers?
errata
1
a maneira correta seria permitir que seu usuário remoto efetue login diretamente.
Capi Etheriel 26/01
16

Observe que, após a Ansible 1.9, o sudotexto foi substituído por become, portanto,

sudo: yes
sudo_user: some_user

torna-se (trocadilho intencional):

become: yes
become_user: some_user

Veja mais detalhes aqui: /programming//a/22749788/402727

ex-nerd
fonte