Publié le: 2017-04-12

Ansible SSH key management

Ansible est un outil d’industrialisation puissant. Il permet notamment de gérer les clefs publiques SSH de vos utilisateurs en les déployant sur un ensemble de machines.

Nous allons ici étudier le module authorized_key fourni par ansible.

Déploiement de clef SSH

Dans un premier temps nous allons parler de la tâche permettant de déployer les clefs SSH.

Pour déployer une clef SSH dans son plus simple appareil voici la syntaxe à adopter:

- authorized_key: user=root key="ssh-rsa AAAA....= ansible@ansiblehost"

Si vous souhaitez définir que la clef SSH de l’utilisateur est la seule qui doit exister pour cet utilisateur, il suffit d’appeler le paramètre exclusive:

- authorized_key:
  user: "root"
  key: "ssh-rsa AAAA....= ansible@ansiblehost"
  exclusive: yes

Suppression de clef SSH

Pour supprimer une clef SSH, il suffit de définir la state de notre tâche à absent

- authorized_key:
  user: "root"
  key: "ssh-rsa AAAA....= ansible@ansiblehost"
  state: absent

Déploiement de clefs SSH multiples par hôtes/groupes d’hôtes

Nous allons corser un peu la tâche ici en lui ajoutant une notion de boucle afin de définir des ensembles de clefs à déployer sur des hôtes:

- authorized_key:
  user: "{{ item.user }}"
  key: "{{ item.key }}"
  exclusive: "{{ item.exclusive | default('no') }}"
  state: "{{ item.state | default('present') }}"
  with_items: "{{ ssh_authorized_keys }}"

Nous avons ici une boucle lisant la variable ssh_authorized_keys. Chaque élément de ce tableau nécessitera le champ user et key. Les champs exclusive et state sont optionnels avec des valeurs par défaut étant le standard du module.

Admettons maintenant que nous ayons un groupe linux_hosts dans notre inventaire ansible, nous allons éditer le fichier group_vars/linux_hosts.yml afin de lui attribuer des clefs SSH au moyen de notre variable:

ssh_authorized_keys:
  - user: root
    key: "ssh-rsa AAAAB...aB= ansible@bastion"
  - user: cafecreme
    key: "ssh-rsa AAAAA...qpX= cafecreme@restau"

Lorsque nous exécutons notre tâche sur notre groupe linux_hosts, nous allons déployer simultanement les deux clefs. Les hôtes n’étant pas dans ce groupe ne seront pas affectés si on appèle, par exemple, le groupe d’hôtes embarqué all.

Conclusion

Cette méthode est très pratique et permet de faire des changements de clefs SSH autorisées sur un nombre d’hôtes important et de le faire varier par groupe d’hôtes sans se compliquer la tâche.