Mise en place d'un outil de gestion de configuration (Ansible)
(Page créée avec « == Présentation == Cette page a pour objet de décrire comment mettre en place l'outil de gestion de configuration Ansible. == Création d'une clé SSH sur le serveur ci… ») |
|||
(2 révisions intermédiaires par le même utilisateur non affichées) | |||
Ligne 2 : | Ligne 2 : | ||
Cette page a pour objet de décrire comment mettre en place l'outil de gestion de configuration Ansible. | Cette page a pour objet de décrire comment mettre en place l'outil de gestion de configuration Ansible. | ||
− | == Création d'une clé SSH | + | ==Créer le dépôt== |
− | Se connecter sur | + | Avec le client GitHub (commande <code>gh</code>, installable depuis [https://github.com/cli/cli#installation le dépôt officiel], disponible par défaut dans le [https://cloud.google.com/shell Cloud Shell Editor] de [https://cloud.google.com/ Google Cloud Platform]), créer un nouveau dépôt avec la commande suivante : |
+ | gh repo create --private myrepo | ||
+ | |||
+ | Cela aura pour effet de créer un nouveau dépôt privé GitHub nommé <code>myrepo</code> : | ||
+ | ✓ Created repository MyGitHubAccount/myrepo on GitHub | ||
+ | |||
+ | Créer un dossier <code>myrepo</code> et se rendre à l'intérieur : | ||
+ | mkdir myrepo | ||
+ | cd myrepo | ||
+ | |||
+ | Créer un premier fichier et réaliser le premier commit : | ||
+ | <pre> | ||
+ | echo "# myrepo" >> README.md | ||
+ | git init | ||
+ | git add README.md | ||
+ | git commit -m "first commit" | ||
+ | git branch -M main | ||
+ | git remote add origin https://github.com/MyGitHubAccount/myrepo.git | ||
+ | git push -u origin main | ||
+ | </pre> | ||
+ | |||
+ | == Création d'une clé SSH == | ||
+ | Se connecter sur n'importe quel conteneur Linux temporaire et lancer la commande suivante : | ||
ssh-keygen | ssh-keygen | ||
Ligne 13 : | Ligne 35 : | ||
Enter passphrase (empty for no passphrase): | Enter passphrase (empty for no passphrase): | ||
Enter same passphrase again: | Enter same passphrase again: | ||
− | Your identification has been saved in /root/.ssh/id_rsa | + | Your identification has been saved in /root/.ssh/id_rsa |
− | Your public key has been saved in /root/.ssh/id_rsa.pub | + | Your public key has been saved in /root/.ssh/id_rsa.pub |
The key fingerprint is: | The key fingerprint is: | ||
− | SHA256: | + | SHA256:gsl5L6M5FV/O94GETrtrCFiyN31+6sM0LQvx9VK5lhk root@140ed833282e |
The key's randomart image is: | The key's randomart image is: | ||
− | +---[RSA | + | +---[RSA 3072]----+ |
− | | | + | | | |
− | |. | + | | | |
− | | | + | | . . | |
− | + | | ..+o . + o E | | |
− | |+ | + | | ==o+SO = + = | |
− | | | + | | o.=o+ @ = B | |
− | | | + | | ooo.B * + . | |
− | | | + | | .o o. B . . | |
− | | . | + | | o. o+= | |
+----[SHA256]-----+ | +----[SHA256]-----+ | ||
</pre> | </pre> | ||
Ligne 33 : | Ligne 55 : | ||
Cela aura pour effet de créer deux fichiers nommés <code>id_rsa</code> (clé privée) et <code>id_rsa.pub</code> (clé publique) : | Cela aura pour effet de créer deux fichiers nommés <code>id_rsa</code> (clé privée) et <code>id_rsa.pub</code> (clé publique) : | ||
<pre> | <pre> | ||
− | + | root@140ed833282e:~# ls -l /root/.ssh | |
total 8 | total 8 | ||
− | + | -rw------- 1 root root 2602 Feb 16 22:24 id_rsa | |
− | + | -rw-r--r-- 1 root root 571 Feb 16 22:24 id_rsa.pub | |
− | -rw------- | + | root@140ed833282e:~# |
− | |||
− | -rw-r--r-- | ||
</pre> | </pre> | ||
− | ==Ajout de la clé SSH dans le dépôt== | + | ==Ajout de la clé privée SSH dans le dépôt== |
Après avoir créer un dépôt dans l'outil de gestion de version GitHub, se rendre dans l'onglet "Settings", section "Secrets and variables/Actions" : | Après avoir créer un dépôt dans l'outil de gestion de version GitHub, se rendre dans l'onglet "Settings", section "Secrets and variables/Actions" : | ||
+ | :[[Fichier:ClipCapIt-230216-221858.PNG|none|thumb|500px|GitHub - Secrets and variables]] | ||
+ | |||
+ | Cliquer sur "New repository secret" : | ||
+ | :[[Fichier:ClipCapIt-230216-222142.PNG|none|thumb|500px|GitHub - New secret]] | ||
+ | |||
+ | Renseigner le nom de la variable sous lequel le secret sera renseigné et accessible (par exemple <code>ROOT_SSH_PRI_HOST</code>) dans le champ "Name". Récupérer le contenu du fichier <code>id_rsa</code> précédemment créé et l'insérer dans le champ "Secret". Cliquer sur "Add secret" pour enregistrer la clé SSH privée. | ||
+ | |||
+ | Le secret apparaît alors : | ||
+ | :[[Fichier:ClipCapIt-230216-222732.PNG|none|thumb|500px|GitHub - Secret ajouté]] | ||
+ | |||
+ | ==Ajout de la clé publique SSH sur la machine cible== | ||
+ | Se connecter à un utilisateur ayant les droits <code>sudo</code> sur la machine cible, éditer le fichier <code>~/.ssh/authorized_keys</code> et y insérer le contenu du fichier <code>id_rsa.pub</code> précédemment créé. | ||
+ | |||
+ | ==Créer la GitHub Action de déploiement d'Ansible== | ||
+ | Dans le dépôt nouvellement créé, créer les dossiers <code>.github/workflows</code> : | ||
+ | mkdir .github/workflows | ||
+ | |||
+ | Dans le dossier <code>.github/workflows</code>, créer le fichier <code>ansible-test-action.yml</code> avec le contenu suivant : | ||
+ | <syntaxhighlight lang="yaml"> | ||
+ | name: Ansible test action | ||
+ | on: | ||
+ | push: | ||
+ | # branches-ignore: | ||
+ | # - 'main' | ||
+ | jobs: | ||
+ | build: | ||
+ | runs-on: ubuntu-latest | ||
+ | steps: | ||
+ | - uses: actions/checkout@v3 | ||
+ | - name: Set up Python 3.11 | ||
+ | uses: actions/setup-python@v1 | ||
+ | with: | ||
+ | python-version: 3.11 | ||
+ | - name: Install dependencies | ||
+ | run: | | ||
+ | python -m pip install --upgrade pip | ||
+ | pip install ansible | ||
+ | - name: set ansible config secrets | ||
+ | env: | ||
+ | SSH_PRI: ${{ secrets.ROOT_SSH_PRI_HOST }} | ||
+ | run: | | ||
+ | mkdir .ssh | ||
+ | echo "$SSH_PRI" > .ssh/id_rsa | ||
+ | chmod 600 .ssh/id_rsa | ||
+ | - name: run ansible test on target | ||
+ | env: | ||
+ | ANSIBLE_HOST_KEY_CHECKING: False | ||
+ | run: | | ||
+ | ansible-playbook -i ansible/hosts.yml ansible/playbook-test.yml | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Créer le dossier <code>ansible</code> et créer le fichier <code>ansible/hosts.yml</code> avec le contenu suivant : | ||
+ | <syntaxhighlight lang="yaml"> | ||
+ | all: | ||
+ | hosts: | ||
+ | myserver.mydomain.com | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Enfin, créer le fichier <code>ansible/playbook-test.yml</code> avec le contenu suivant : | ||
+ | <syntaxhighlight lang="yaml"> | ||
+ | - name: Test | ||
+ | hosts: all | ||
+ | become: true | ||
+ | remote_user: rocky | ||
+ | vars: | ||
+ | ansible_ssh_private_key_file: ".ssh/id_rsa" | ||
+ | tasks: | ||
+ | - name: Display crypttab file | ||
+ | shell: | | ||
+ | cat /etc/crypttab | ||
+ | register: file_content | ||
+ | - name: "Print the file content to a console" | ||
+ | debug: | ||
+ | msg: "{{ file_content.stdout }}" | ||
+ | </syntaxhighlight> |
Version actuelle datée du 16 février 2023 à 23:52
Sommaire
Présentation
Cette page a pour objet de décrire comment mettre en place l'outil de gestion de configuration Ansible.
Créer le dépôt
Avec le client GitHub (commande gh
, installable depuis le dépôt officiel, disponible par défaut dans le Cloud Shell Editor de Google Cloud Platform), créer un nouveau dépôt avec la commande suivante :
gh repo create --private myrepo
Cela aura pour effet de créer un nouveau dépôt privé GitHub nommé myrepo
:
✓ Created repository MyGitHubAccount/myrepo on GitHub
Créer un dossier myrepo
et se rendre à l'intérieur :
mkdir myrepo cd myrepo
Créer un premier fichier et réaliser le premier commit :
echo "# myrepo" >> README.md git init git add README.md git commit -m "first commit" git branch -M main git remote add origin https://github.com/MyGitHubAccount/myrepo.git git push -u origin main
Création d'une clé SSH
Se connecter sur n'importe quel conteneur Linux temporaire et lancer la commande suivante :
ssh-keygen
Exemple de retour de création de clé SSH :
Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa Your public key has been saved in /root/.ssh/id_rsa.pub The key fingerprint is: SHA256:gsl5L6M5FV/O94GETrtrCFiyN31+6sM0LQvx9VK5lhk root@140ed833282e The key's randomart image is: +---[RSA 3072]----+ | | | | | . . | | ..+o . + o E | | ==o+SO = + = | | o.=o+ @ = B | | ooo.B * + . | | .o o. B . . | | o. o+= | +----[SHA256]-----+
Cela aura pour effet de créer deux fichiers nommés id_rsa
(clé privée) et id_rsa.pub
(clé publique) :
root@140ed833282e:~# ls -l /root/.ssh total 8 -rw------- 1 root root 2602 Feb 16 22:24 id_rsa -rw-r--r-- 1 root root 571 Feb 16 22:24 id_rsa.pub root@140ed833282e:~#
Ajout de la clé privée SSH dans le dépôt
Après avoir créer un dépôt dans l'outil de gestion de version GitHub, se rendre dans l'onglet "Settings", section "Secrets and variables/Actions" :
Cliquer sur "New repository secret" :
Renseigner le nom de la variable sous lequel le secret sera renseigné et accessible (par exemple ROOT_SSH_PRI_HOST
) dans le champ "Name". Récupérer le contenu du fichier id_rsa
précédemment créé et l'insérer dans le champ "Secret". Cliquer sur "Add secret" pour enregistrer la clé SSH privée.
Le secret apparaît alors :
Ajout de la clé publique SSH sur la machine cible
Se connecter à un utilisateur ayant les droits sudo
sur la machine cible, éditer le fichier ~/.ssh/authorized_keys
et y insérer le contenu du fichier id_rsa.pub
précédemment créé.
Créer la GitHub Action de déploiement d'Ansible
Dans le dépôt nouvellement créé, créer les dossiers .github/workflows
:
mkdir .github/workflows
Dans le dossier .github/workflows
, créer le fichier ansible-test-action.yml
avec le contenu suivant :
name: Ansible test action
on:
push:
# branches-ignore:
# - 'main'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python 3.11
uses: actions/setup-python@v1
with:
python-version: 3.11
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install ansible
- name: set ansible config secrets
env:
SSH_PRI: ${{ secrets.ROOT_SSH_PRI_HOST }}
run: |
mkdir .ssh
echo "$SSH_PRI" > .ssh/id_rsa
chmod 600 .ssh/id_rsa
- name: run ansible test on target
env:
ANSIBLE_HOST_KEY_CHECKING: False
run: |
ansible-playbook -i ansible/hosts.yml ansible/playbook-test.yml
Créer le dossier ansible
et créer le fichier ansible/hosts.yml
avec le contenu suivant :
all:
hosts:
myserver.mydomain.com
Enfin, créer le fichier ansible/playbook-test.yml
avec le contenu suivant :
- name: Test
hosts: all
become: true
remote_user: rocky
vars:
ansible_ssh_private_key_file: ".ssh/id_rsa"
tasks:
- name: Display crypttab file
shell: |
cat /etc/crypttab
register: file_content
- name: "Print the file content to a console"
debug:
msg: "{{ file_content.stdout }}"