Via ansible alterar senha de conta não-root usando o comando passwd e escolhendo senha antiga de arquivos ansible

2

Tenho muitos sistemas com um nome de usuário comum para fazer login. A senha também é a mesma para a maioria dos sistemas. Eu tenho 1 arquivo de inventário com todos os sistemas. Para os sistemas que possuem uma senha diferente, salvei a senha com relação ao nome do host e, para os demais, ela está no arquivo group_vars.

No arquivo de inventário:

hostname1 ansible_ssh_pass=pass1
hostname2 ansible_ssh_pass=pass2
hostname3
hostname4

arquivo group_vars:

ansible_user: someuser
ansible_ssh_pass: pass3

Eu não tenho privilégios mais altos. De outro thread eu consegui descobrir como usar somente o passwd para mudar a senha e não usar outros utilitários.

shell: 'printf "%s\n" OldPass NewPass NewPass | passwd'

O passwd não suporta a opção "-p".

Eu estou tentando descobrir uma maneira de obter o valor do OldPass do mesmo onde ansible o está escolhendo para cada host, para que eu não precise executar este playbook n vezes e colocar manualmente o OldPass no shell comando.

Por favor, conselhos sobre como proceder com isso.

Obrigado.

    
por Aseem 26.05.2016 / 13:33

1 resposta

1

Você pode usar variáveis diretamente:

$ ansible -c local -m shell \
  -a "printf '%s\n' {{ ansible_ssh_pass }} {{ ansible_ssh_newpass }}" \
  --extra-vars="ansible_ssh_pass=oldpass ansible_ssh_newpass=newpass" \
  localhost
127.0.0.1 | SUCCESS | rc=0 >>
oldpass
newpass

Neste exemplo, as variáveis são alimentadas para ansible da linha de comando, no seu exemplo, elas viriam de group_vars .

Você pode até mesmo definir um valor padrão e substituí-lo por sistemas específicos:

$ ansible -c local -m shell \
  -a "printf '%s\n' {{ ansible_ssh_pass | default('otherpass') }} {{ ansible_ssh_newpass }}" \
  --extra-vars="ansible_ssh_newpass=newpass" \
  localhost
127.0.0.1 | SUCCESS | rc=0 >>
otherpass
newpass
    
por 26.05.2016 / 15:32