Search code examples
sshansiblessh-keys

How to add an existing public key to authorized_keys file using Ansible and user module?


I'm programming a simple task with Ansible to create a user and add an existing RSA public key. This is the code I wrote:

- name: SYSTEM - Create test user
  tags: system-user
  user: 
        name: "{{ test_user }}"
        state: present
        createhome: yes

- name: SYSTEM - Add existing pub key for test user
  tags: system-user
  copy: 
       content: "{{ test_user_pubkey }}"
       dest: "/tmp/test_user_id_rsa.pub"
       force: no
       owner: "{{ test_user }}"
       group: "{{ test_user }}"
       mode: 0600

- name: SYSTEM - Set authorized key for test_user took from file
  tags: system-user
  authorized_key:
        user: "{{ test_user }}"
        state: present
        key: "{{ lookup('file', '/tmp/test_user_id_rsa.pub') }}"

The code I wrote is not elegant and I think that the best option will be to add the existing RSA public key with the user creation block in order to create and filled up the authorized_keys file.

I've read the Ansible user module but ssh_key_file method does not include the possibility to echo the value of an existing pub key to the authorized_keys file (the end purpose is to be able to remote connect with ssh using the user and the private key).

ssh_key_file = Optionally specify the SSH key filename. If this is a relative filename then it will be relative to the user's home directory.

Is it possible with Ansible to manage this process within the user module?


Solution

  • The answer to your problem is:

    - name: SYSTEM - Create test user
      tags: system-user
      user: 
        name: "{{ test_user }}"
        state: present
        createhome: yes
    
    - name: SYSTEM - Set authorized key for test_user took from file
      tags: system-user
      authorized_key:
        user: "{{ test_user }}"
        state: present
        key: "{{ test_user_pubkey }}"
    

    That's all that is needed.


    Regarding your reading of the documentation, ssh_key_file pertains to generating an SSH key pair, which is not what you want.