Usando ansible para adicionar chaves públicas dos usuários ao arquivo authorized_keys de um usuário

3

Tentativa de adicionar chaves públicas do Github de duas pessoas a um arquivo de usuários autorizados do usuário. Eu sou capaz de recuperar com sucesso as chaves SSH:

---
- hosts: 127.0.0.1
  connection: local
  vars:
    my_users:
      belminf: "belminf"
      bob: "tmessins"
  tasks:
    - name: Retrieving all keys from GitHub
      shell: /usr/bin/curl https://github.com/{{ item.value }}.keys 2> /dev/null
      register: ssh_keys
      with_dict: my_users

    - debug: var=ssh_keys

No entanto, não tenho certeza de como percorrer os resultados ssh_keys e usar a tarefa authorized_keys para adicionar as chaves recuperadas.

Minha tentativa ridícula:

   - name: Adding keys to authorized_keys
      authorized_key: user=belminf key="{{ item }}" path=/home/belminf/test_auth state=present
      with_items: ssh_keys.results

Resultados em invalid key specified . Compreensivelmente, mas estou sem ideias. Alguém?

    
por Belmin Fernandez 05.02.2015 / 23:45

3 respostas

6

OK, fiz alguns ajustes no seu manual, e aqui está a versão revisada

---
- hosts: 127.0.0.1
  connection: local
  vars:
    my_users:
      belminf: "belminf"
      bob: "tmessins"
  tasks:
    - name: Retrieving all keys from GitHub
      shell: /usr/bin/curl https://github.com/{{ item.value }}.keys 2> /dev/null
      register: ssh_keys
      with_dict: my_users

   - name: Adding keys to authorized_keys
      authorized_key: user=belminf key="{{ item.stdout }}" path=/home/belminf/test_auth state=present
      with_items: ssh_keys.results
      ignore_errors: yes

Algumas alterações observam:

  • No módulo authorized_key , a chave foi alterada para item.stdout . O stdout era a chave pública que você precisa.
  • No módulo authorized_key , defini ignore_errors: yes para retomar a execução do playbook sempre que a tarefa de curl não conseguiu buscar, seja um problema da Internet ou 404 Not Found (como a chave do tmessins). Claro que você pode ajustá-lo por controlando o que define a falha por isso ainda falha quando outro erro aconteceu.
por 06.02.2015 / 04:35
6

A partir do Ansible 1.9, o valor para key pode ser um URL, eliminando a necessidade de enrolar o URL através do módulo shell .

Exemplo:

- name: Add my SSH key
  authorized_key: user=jeffwidman key=https://github.com/jeffwidman.keys
    
por 15.04.2015 / 02:56
0

É muito simples agora:

- name: get github key(s) and update the authorized_keys file
  authorized_key:
    user: "{{ username }}"
    key: "https://github.com/{{ username }}.keys"

para detalhes, consulte este github role

    
por 01.07.2016 / 21:17