Utiliser Ansible pour déployer sa clé SSH et installer Python

30 décembre 2017

Si vous commencez à utiliser Ansible, vous pouvez vous retrouver dans ce genre de situation :

Standing up Ansible to help manage my 30+ VPS’ and couldn’t help thinking….

“I really wish I had a tool like Ansible to deploy this SSH key to these 30+ systems…” /irony

— Eric Capuano (@eric_capuano) December 30, 2017

Vous avez un paquet de machines sur lesquels :

À ce moment là, vous vous dîtes que ce serait pas mal d’avoir un outil comme Ansible pour normaliser tout ça. Eh bien bonne nouvelle ! Je connais un outil qui s’appelle Ansible et qui permet de faire tout ça 🙂

La première chose à faire est de définir votre inventaire prenant en compte vos cas particuliers. Voici un exemple commenté :

# hosts.ini
# un serveur avec :
#  - un utilisateur particulier défini par 'ansible_user'
#  - pas de clé SSH, donc on défini le mot de passe via 'ansible_ssh_pass'
srv-01 ansible_user=notroot ansible_ssh_pass=topsecret
# un serveur avec :
#  - le compte root
#  - une clé SSH spécifique définie via 'ansible_ssh_private_key_file'
srv-02 ansible_user=root ansible_ssh_private_key_file=~/.ssh/id_srv02

Ensuite, la seconde première chose à faire c’est d’installer Python sur toutes les machines. Pour cela on va écrire un petit playbook qui utilisera le module raw permettant de balancer des commandes brutes à travers SSH :

# bootstrap.yml
---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - raw: test -e /usr/bin/python || ( [ $(command -v apt) ] && apt install -y python-minimal )
    - raw: test -e /usr/bin/python || ( [ $(command -v yum) ] && yum install -y python )
...

Ici j’ai utilisé gather_facts: no pour éviter qu’Ansible ne cherche à récupérer tout un tas d’informations sur le hôtes, ce qui échouerait Python n’étant pas encore installé. Le paramètre become: yes sert à escalader les privilèges pour lancer les commandes en root. Et les tâches lancent une commande qui :

On a ainsi quelque chose qui fonctionne pour Debian, Ubuntu, RedHat, CentOS, Fedora, etc. Et qu’on lance avec la commande suivante:

$ ansible-playbook -i hosts.ini bootstrap.yml

La troisième et dernière des premières choses à faire, c’est de déployer la configuration normalisée que vous souhaitez (votre clé SSH, votre user, etc.). On reprend donc notre playbook précédent et on y ajoute les éléments suivants :

# bootstrap.yml
---
[…]
- hosts: all
  become: yes
  tasks:
    - name: create my main user
      user:
        name: myusername
        password: $6$shKSkXZIG0ZLHKOg$Ai1nQ0ETm0MavWCAapU7F5GXIK.Y9SjSDZHzUnAQB7CxgihYy8HaNKZlT.ij1DHGjeoOsRXWSDNuRgnhE5Uwg.
        groups: sudo, wheel
        append: yes
    - name: deploy my main ssh public key to my main user
      authorized_key:
        user: myusername
        key: "{{ lookup('file', '/home/nicolas/.ssh/id_ed25519.pub') }}"
...

On a utilisé ici les modules user et authorized_keys, je vous laisse aller jeter un coup d’œil à la documentation de chacun pour voir la signification et l’utilisation des différents paramètres.

On relance l’exécution de notre playbook :

$ ansible-playbook -i hosts.ini bootstrap.yml

Et c’est terminé. On peut maintenant nettoyer notre inventaire de ses variables spécifiques à chaque hôte, et utiliser les options définies globalement dans le fichier ansible.cfg ou dans les variables de groupes.


Commenter
Articles de blogs que je lis

40 ans de GNU

40 ans de GNU Richard Stallman ne voulait pas changer le monde. Il ne voulait pas se battre contre les moulins à vent. Il ne voulait pas réinventer la roue. Richard Stallman voulait simplement retrouver ses amis, sa communauté. Pour ce jeune homme barbu et …
Ploum.net · 27 Sep 2023

La blog­chain

Avec les réseaux sociaux, les petits espaces person­nels inter­con­nec­tés qu’é­taient les blogs ont peu à peu disparu du paysage. Il en reste, mais les liens ne sont plus aussi forts. À la grande époque il était fréquent d’avoir des blogroll. sur un coin de c…
Carnet de notes · 8 Sep 2023

#63 : Comment parler du vivant pour mieux l’appréhender

Baptiste Morizot est philosophe, maître de conférences à Aix-Marseille Université et auteur de plusieurs ouvrages sur les relations entre l'humain et le reste du vivant (Les Diplomates, Sur la piste animale, Manières d'être vivant…). En avril dern…
Nourritures terrestres · 13 Aug 2023