Executando tarefa Ansible como um usuário específico

18

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

---

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

A execução desta tarefa mostra que o comando whoami retorna um usuário diferente do que eu defini na tarefa (precisamente, retorna o usuário que está definido no arquivo hosts 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 eu recebo o erro ' Missing sudo password ', embora haja uma linha no arquivo sudoers que diz someusername ALL=(ALL) NOPASSWD:ALL e emite comandos com sudo na máquina remota, pois someusername nã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 arquivo hosts ou root ?

    
por errata 26.01.2015 / 16:36

2 respostas

17

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

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

  • someusername ALL = (TODOS) NOPASSWD: ALL é uma configuração do sudo que permite a usuário someusername para executar todos os comandos em qualquer host sem uma senha. Ele não permite que ninguém emita comandos como someusername .

O ideal é que você efetue login diretamente como o usuário certo e é isso que trata o remote_user . Mas normalmente você só pode fazer login como um usuário administrativo (digamos, ubuntu ) e ter que usar comandos sudo como outro usuário (digamos scrapy ). Em seguida, você deve deixar remote_user para o usuário que efetua login e incluir as seguintes propriedades visíveis no trabalho:

- name: log in as ubuntu and do something as scrapy
  remote_user: ubuntu
  sudo: true
  sudo_user: scrapy
  shell: do-something.sh
    
por 26.01.2015 / 17:21
12

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

sudo: yes
sudo_user: some_user

torna-se (trocadilho):

become: yes
become_user: some_user

Veja mais detalhes aqui: link

    
por 06.12.2015 / 09:36