Deploy de public keys con Ansible
Hola!
Quienes usamos o empezamos a usar Ansible nos preguntamos cómo instalar la clave pública en los hosts (que pueden ser muchos) que queremos manejar a través de Ansible... usando Ansible mismo :)
La respuesta la encontré a través de un playbook que luce de la siguiente manera:
El archivo external_vars.yml contiene la clave pública:
El comando de Ansible se ejecuta de la siguiente manera:
(-c paramiko lo usé debido a un issue reportado en https://github.com/ansible/ansible/issues/3564)
Para verificar que está todo en orden y que la clave fue instalada correctamente:
El módulo lineinfile lo usé para apendar la clave pública en el archivo authorized_keys (ver https://docs.ansible.com/ansible/latest/modules/lineinfile_module.html)
Espero que les resulte de utilidad!
NOTAS ADICIONALES
Si se deploya las keys en CentOS 6, es necesario cambiar los permisos tanto del fichero authorized_keys como del directorio .ssh. El playbook quedaría de esta manera:
Quienes usamos o empezamos a usar Ansible nos preguntamos cómo instalar la clave pública en los hosts (que pueden ser muchos) que queremos manejar a través de Ansible... usando Ansible mismo :)
La respuesta la encontré a través de un playbook que luce de la siguiente manera:
$ cat deploy_ssh_key.yml
1: ---
2: - hosts: all
3: gather_facts: false
4: vars_files:
5: - external_vars.yml
6: tasks:
7: - name: Create direcotry
8: file:
9: path: "/home/usuario-remoto/.ssh"
10: state: directory
11: - name: Create empty file
12: file:
13: path: "/home/usuario-remoto/.ssh/authorized_keys"
14: state: touch
15: - name: Put pubkey
16: lineinfile:
17: path: "/home/usuario-remoto/.ssh/authorized_keys"
18: line: "{{ pub_key }}"
El archivo external_vars.yml contiene la clave pública:
$ cat external_vars.yml
---
pub_key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCnTvKiRzIU0Jqz3kpf97wVJdT4LwHZuu6Nr/GFFOtq0QeWP5Eu6JmWkvwuNoghdXu/lxHf//07djGUfxnt9BDdQmDMsGx3qEFzAQAlrlq2P6lygSksy8MROQsHCDzT0hX7pntiwigDE7rUuGt3h3T+IFuvjfZqMx2wiX4dFLUC9+HcdtUuzMHjMs1zevP2nmpOWAP7LkcwlkdJZIpkOqujshJFymuXylWvT8vV5RbqwB7ZaR1m+rpCYt1MQFgHgI/42jXeywbORA3Nm6pjVCccNjJ5DpbhiEZA/O/SJH/zlFPuoPaTai5sH8MLuU8h11C4U9UPY08/XhAkIDebVri1 ansible@verovan.com.ar
...
El comando de Ansible se ejecuta de la siguiente manera:
$ ansible-playbook -u usuario-remoto deploy_ssh_key.yml --ask-pass -c paramiko
(-c paramiko lo usé debido a un issue reportado en https://github.com/ansible/ansible/issues/3564)
Para verificar que está todo en orden y que la clave fue instalada correctamente:
$ ansible all -u usuario-remoto --private-key-file=/ruta/a/la/clave-privada -m ping
El módulo lineinfile lo usé para apendar la clave pública en el archivo authorized_keys (ver https://docs.ansible.com/ansible/latest/modules/lineinfile_module.html)
Espero que les resulte de utilidad!
NOTAS ADICIONALES
Si se deploya las keys en CentOS 6, es necesario cambiar los permisos tanto del fichero authorized_keys como del directorio .ssh. El playbook quedaría de esta manera:
--- - hosts: curso gather_facts: true vars_files: - external_vars.yml tasks: - name: make direcotry file: path: "/home/
usuario-remoto
/.ssh" state: directory - name: create empty file file: path: "/home/
usuario-remoto
/.ssh/authorized_keys" state: touch - name: put pubkey lineinfile: path: "/home/
usuario-remoto
/.ssh/authorized_keys" line: "{{ pub_key }}" - name: change permissions file file: path: "/home/usuario-remoto/.ssh/authorized_keys" mode: 0600 when: ansible_distribution == "CentOS" - name: change permissions dir file: path: "/home/usuario-remoto/.ssh" mode: 0700 when: ansible_distribution == "CentOS"
Comentarios
Publicar un comentario