Distribuyendo nuestra clave pública de SSH con Ansible

por | enero 15, 2019

En función del número de servidores donde tengamos que copiar nuestra clave pública, puede ser una tarea sencilla o convertirse en algo tedioso. Ansible nos proporciona una manera rápida de hacerlo en tantos servidores como necesitemos con el módulo authorized_key.

El único requisito es que el usuario con el que vamos a conectar por SSH exista en la máquina remota y tenga en todas la misma contraseña.

En el directorio de nuestro playbook creamos el fichero ansible.cfg con el siguiente contenido:

[defaults]
host_key_checking = false

Esto es necesario para que Ansible no compruebe el fingerprint al conectar por SSH con los servidores remotos.

En el fichero de hosts ponemos los servidores donde vamos a copiar nuestra clave pública:

[docker]
worker1
worker2
worker3

En el fichero main.yml indicamos las instrucciones:

- hosts: all
  tasks:
    - authorized_key:
        user: jota
        state: present
        key: "{{ lookup('file', '/home/jota/.ssh/id_rsa.pub') }}"

Ahora lanzamos el playbook con:

ansible-playbook -i hosts -u jota -k main.yml

La contraseña SSH sólo debería pedirla una vez, siempre y cuando sea la misma en todos los servidores. Si todo va bien veremos:

Y ya tendremos nuestra clave pública añadida en /home/jota/.ssh/authorized_keys de nuestros servidores remotos, que para el ejemplo son 3 pero podrían ser más.