Le besoin est de pouvoir standardiser la sécurité et la personnalisation des serveurs.
Mon objectif est ici définir un “kit” permettant de préparer un environnement linux (Debian) à l’automatisation via ansible.
La première étape est de configurer un compte dédié à l’automatisation qui pourra réaliser une escalade de privilège via sudo.
Pour l’exemple, j’appliquerai cette automatisation à un serveur hébergé chez Scaleway.
name: Set includedir in sudoers
lineinfile:
dest: /etc/sudoers
line: “#includedir /etc/sudoers.d”
state: present
become: yes
become_method: su
name: create user-ansible
user:
name: user-ansible
comment: For automation
groups: sudo
shell: /bin/bash
append: yes
become: yes
become_method: su
name: Add user “user-ansible” to sudo
lineinfile:
path: /etc/sudoers.d/user-ansible
line: ‘user-ansible ALL=(ALL) NOPASSWD: ALL’
state: present
mode: 0440
create: yes
become: yes
become_method: su
name: Set up multiple authorized keys
authorized_key:
user: user-ansible
state: present
key: “{{ item }}”
key_options: “no-port-forwarding”
with_file:
~/.ssh/id_ecdsa.pub
become: yes
become_method: su
## Création de la recette
init_system/playbook.yml
name: “Install sudo & ansible user”
hosts: all
roles:
- “init_system”
# Application chez Scaleway
Je travaille sur un serveur debian fraichement provisionné. La première connexion à distance est réalisée via une authentification par clé sur le compte root.
## Génération de la clé
$ ssh-keygen -f ~/.ssh/id_initialLogin -t ed25519
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/eric/.ssh/id_initialLogin.
Your public key has been saved in /home/eric/.ssh/id_initialLogin.pub.
Limitation des droits d'accès aux clés :
chmod 600 /home/eric/.ssh/id_initialLogin*
## Déclaration de la clé sur le serveur
On utilise la console scaleway :
Redemarrer le serveur pour la prise en compte (ou se connecter via la console web et executer la commande scw-fetch-ssh-keys --upgrade
## Création d’un inventaire
$ ansible -i inventory_redteams.yml -m ping all –user root
Enter passphrase for key ‘/home/eric/.ssh/id_initialLogin’:
[WARNING]: Platform linux on host host1 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python
interpreter could change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.
<div class="alert alert-note">
<div>
<p>Il est possible d’utiliser ssh agent pour mémoriser la clé :</p>
<pre tabindex="0"><code>eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_initialLogin
Enter passphrase for /home/eric/.ssh/id_initialLogin:
Identity added: /home/eric/.ssh/id_initialLogin (eric@DESKTOP-JS69KRL)
</code></pre>
</div>
</div>
## Création de la clé pour l'utilisateur