Je note ici ce qui vient de me coûter 2 heures, pour déployer une clef privée SSH.

L’objectif est de déployer les clefs SSH (privée et publique) par Ansible. La partie privée étant une donnée sensible, elle est stockée dans un fichier chiffré avec ansible-vault. Ce fichier contient donc dans une variable la clef privée:

user_id_rsa : |
 -----BEGIN RSA PRIVATE KEY-----
 Proc-Type: 4,ENCRYPTED
 DEK-Info: AES-128-CBC,C32...
 ...
 -----END RSA PRIVATE KEY-----

Première astuce: utiliser | pour avoir une variable sur plusieurs lignes et commencer les lignes par un espace pour signifier que les lignes appartiennent à la variable précédemment déclarée.

Dans le fichier de tache, il est maintenant nécessaire d’écrire le contenu de user_id_rsa dans un fichier .ssh/id_rsa. Pour cela il faut utiliser la directive copy

- name: Deploy ssh private key
  copy:
    content: "{{ user_id_rsa }}"
    dest: /home/user/.ssh/id_rsa
    mode: 0400
    owner: user
    group: user

L’option content permet d’écrire le contenu dans le fichier précisé par dest. La deuxième astuce c’est de bien utiliser le séparateur : (content: "{{ user_id_rsa }}") et non =. L’utilisation du séparateur = met des retours chariots supplémentaires en fin de ligne en plus de ceux contenus dans la variable.