authorized_keys e with_items em Ansible

1

Estou tentando criar novos usuários e preencher o arquivo ~ / .ssh / authorized_keys usando o Ansible. Aqui está minha tarefa:

- name: Create user account
  user: name="{{ item.username }}-ns" comment="{{ item.realname }}"
    groups=adm,sudo, append=yes
    password="{{ item.password }}"
  with_items: "{{ ssh_users }}"
- name: copy ssh keys to authorized_keys
  authorized_key:  user="{{ item.username }}-ns"
    key="{{ sshkey_path }}/{{ item.username }}.pub"
  with_item: "{{ ssh_users }}"

e meu arquivo de variáveis é assim:

ssh_users:
  - username: "jdoe"
    realname: "jrow"
    password: "$6$FWhXrnkizCqwKJcM$y55ETlvthHA49NuzwYgKAmOTnsBDRzfXE1OiOuJ.HHwVuI4P/BQrR/eKgYOioevIrgYYw.HpeP/sxCR3M38SW/"
  - username: "jroe"
    realname: "Jane Roe"
    password: "$6$wQhvxq3C.egKzrGi$na0M4jn3bi1lM2dz2YvdbAvvJBvbg4iGH1K6j7sHnZZt7mZggexHPvxOT799pfaDKmU6xDrbtbrLsxviGyABA0"
  - username: "testuser"
    realname: "Test User"
    password: "$6$U24oz4dsfdYD/LZ$fuziBEkc2q/POHSEvfcuTaD6wFTF.49RbU8z8JLQk3oki/He87cYqpSZtL16A11EBaG6VdemXdy6\V/"

Configurei as chaves ssh públicas de vários usuários em um diretório de teclas públicas que coloquei na variável chamada "sshkey_path". Existe um arquivo de chave pública para cada usuário (por exemplo, jdoe.pub).

Quando eu executo o playbook, a criação da conta de usuário corre bem, mas a parte authorized_keys diz:

ERROR! 'with_item' is not a valid attribute for a Task

The error appears to have been in 'user-add.yaml': line 29, column 7, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:


    - name: copy ssh keys to authorized_keys
      ^ here

Alguma idéia do que poderia estar dando errado? Em princípio, ele deve funcionar, pois há exemplos semelhantes encontrados on-line. Eu já joguei com o formato, mas não consigo fazer funcionar. Seus ponteiros são apreciados.

    
por imlepid 25.07.2016 / 22:47

2 respostas

3

A razão pela qual isso está falhando é que o plug-in atual é chamado with_items e não com_item. Você esqueceu o s.

    
por 26.07.2016 / 01:12
4

Para a posteridade:

Junto com o erro apontado por "linuxdynasty" em relação a with_items , houve mais um erro na maneira como eu estava fazendo referência ao arquivo-chave.

Eu tentei usar a seguinte sintaxe:

key="{{ sshkey_path }}/{{ item.username }}.pub"

Mas isso não funcionará nesse caso porque authroized_key espera um arquivo. É preciso usar "with_files" ou pesquisas para obter isso.

Para fazê-lo funcionar na minha situação, tive que concatenar várias variáveis juntas, o que fiz com a ajuda deste StackOverflow postar. A sintaxe final que eu encontrei foi:

key="{{ lookup('file', sshkey_path+item.username+'.pub') }}"

e funcionou bem.

    
por 27.07.2016 / 01:36