Skip to content

Commit

Permalink
Add post about ssh basics
Browse files Browse the repository at this point in the history
  • Loading branch information
gfaivre committed Oct 24, 2023
1 parent e81b6bc commit 931608b
Show file tree
Hide file tree
Showing 6 changed files with 97 additions and 8 deletions.
61 changes: 56 additions & 5 deletions content/blog/cours/ansible/ansible-premiers-pas.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
type: "post"
title: "Ansible - Découverte et premiers pas."
date: "2023-03-20"
date: "2023-10-24"
lastModified: ~
tableOfContent: true
description: "Dans ce premier cours à destination des étudiants et/ou néophytes, nous verrons ce qu'est Ansible ainsi qu'un exemple très simple de son utilisation."
Expand All @@ -15,21 +15,72 @@ authors: ["gfaivre"]
## Préambule

Ce cours est utilisé dans le cadre de TP au sein de l'IUT Lyon 1. Il est notamment dispensé à des étudiants peu ou pas familiers avec les stratégies d'automatisation et de déploiement des infrastructures.
Bien que très axé débutants il peut également représenté une possibilité de monter « rapidement » pour certaines équipes sur les principaux fondamentaux d'Ansible afin de disposer du bagage minimal nécessaire à son utilisation.
Bien que très axé débutants il peut également représenté une possibilité de monter « rapidement » pour certaines équipes sur les principes fondamentaux d'Ansible afin de disposer du bagage minimal nécessaire à son utilisation.

Il s'agit bien évidemment de supports à vocation pédagogique qui **ne sont pas toujours transposables** à une activité professionnelle.

## Prérequis

Afin d'aborder les différents concepts du cours il est recommandé de disposer:
- D'au moins deux machines virtuelles accessibles via **SSH** (idéalement 4);
- Docker installé sur la machine de travail (Docker Desktop pour Windows et OSX);
- **Docker** et **Docker compose** installés sur la machine de travail (Docker Desktop pour Windows et OSX);
- D'une installation d'Ansible récente (2.14.3), il est également possible (et même recommandé) d'utiliser: https://github.com/manala/manala-recipes/tree/master/lazy.ansible comme expliqué **[ici](#)**.
- D'une paire de clé de SSH que vous aurez pris soin de générer (voir [ici](/blog/cours/cle-ssh-principes-de-base)) si vous n'en disposez pas déjà.

En fonction de votre environnement de travail la mise en place des différents outils est décrite **[ici](#)**.

## Ressources
## Mise en route

Première étape avant de pouvoir rentrer dans le vif du sujet, nous aurons besoin de mettre en place un environnement de travail dédié à nos travaux.

### Infrastructure

Pour pouvoir configurer nos serveurs, il nous faudra... des serveurs, ou plutôt des machines virtuelles pour leur facilité à être arrêter, détruites et reconstruites.
N'importe quel fournisseur de cloud publique peut faire l'affaire, utilisez celui avec lequel vous avez le plus d'affinités.

Dans le cadre de l'IUT nous utiliserons OpenStack solution OpenSource qui a fait ses preuves et qui plus est disponible dans l'enceinte de l'université.
C'est donc sur cette base que je présenterai les étapes suivantes, au demeurant, parfaitement transposables chez d'autres fournisseurs.

Nous travaillerons avec deux environnements distincts, « Staging » et « Production » qui embarqueront chacune une instance applicative (qui portera donc le code d'une application) et une instance de base de données (chargée de faire fonctionner notre serveur de base de données).
Si vous êtes limité en terme de création d'instance, il est envisageable de n'avoir qu'une instance par environnement, celle-ci embarquant l'applicatif et les données.

### Environnement local

Les étapes suivantes seront donc à exécuter à partir de votre machine.

#### Se connecter avec le client SSH

Considérant que vous remplissez les prérequis et que vous avez créé vos instances distantes nous allons pour commencer initier une « simple » connexion SSH vers notre instance.

```
ssh [email protected]
```

Si vous rencontrez des soucis .. forbidden (exemple) essayer en ajoutant explicitement le chemin vers la clé.

```
ssh -i ~/.ssh/ed25519 [email protected]
```

#### Configuration du client SSH

Afin d'éviter d'avoir à spécifier le chemin vers la clé à chaque connexion et afin d'afiner la configuration de notre client nous pouvons également définir un fichier `~/.ssh/config` contenant les directives suivantes:

```
Host 192.168.140.*
Port 22
User debian
IdentityFile ~/.ssh/keyfile
IdentitiesOnly yes
ForwardAgent yes
```

Celles-ci sont relativement compréhensibles, précisons tout de même pour les deux dernières:

- `IdentitiesOnly` indique à SSH de n'envoyer au serveur **QUE** la clé définie à la directive `IdentityFile` quand bien même vous disposez d'autres clés dans votre répertoire `~/.ssh`
- `ForwardAgent` permet d'activer le transfert d'identité vers l'agent SSH du serveur

## Aller plus loin avec les sources

### Ansible


40 changes: 39 additions & 1 deletion content/blog/cours/cle-ssh-principes-de-base.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,12 @@ La très grande majorité des accès serveurs sont aujourd'hui basés sur leur u
ssh-keygen -t ed25519 -a 150
```

**Se connecter à un serveur distant**

```
ssh -i ~/.ssh/id25519 user@server_address
```

## Génération d'une paire de clés

Le principe de l'authentification par clés repose, comme explicité sur les différents liens ci-dessus, par la création d'une paire de clés asymétriques.
Expand All @@ -59,6 +65,13 @@ Il est recommandé, à la date de rédaction de cet article, d'utiliser une long
ssh-keygen -t ed25519 -a 150 -C "[email protected]"
```

<figure>
<img src="content/images/blog/2023/ansible/ssh-keygen.gif">
<figcaption>
<span class="figure__legend">Génération d'une paire de clé SSH</span>
</figcaption>
</figure>

L'option `-C` permet d'ajouter un commentaire à votre clé, pratique notamment pour **identifier le propriétaire d'une clé publique coté serveur**.

!!! danger "Phrase de passe"
Expand All @@ -82,8 +95,33 @@ Imaginons un serveur pour lequel votre clé est authorisée à se connecter (pou

Cette commande aura donc pour effet « d'ouvrir » une connexion sur un serveur distant via le protocol SSH vous permettant de saisir des lignes de commande **directement** sur ce serveur et donc de **l'administrer**.

<figure>
<img src="content/images/blog/2023/ansible/ssh.gif">
<figcaption>
<span class="figure__legend">Ouverture d'une session sur un serveur distant</span>
</figcaption>
</figure>

Cette exemple montre l'ouverture d'une session avec l'utilisateur `debian` sur le serveur ayant pour adresse IP `146.59.243.95`.

**Plusieurs choses à retenir à cette étape:**

- Par défaut ssh **parcourt les clés SSH privées disponibles** dans le répertoire `~/.ssh` afin de les proposer au serveur auquel vous essayez de vous connecter.
- Vous optenez en retour **la première fois** que vous vous connectez un message vous demandant de **confirmer la connexion** vers le serveur distant (Host key checking).

## Compléments

Si vous disposez de plusieurs clés SSH et que vous ne souhaitez pas que l'ensemble de vos clés privées soient soumises au serveur distant vous pouvez spécifier quelle clé utiliser en utilisant l'option `-i`.

```
ssh -i ~/.ssh/id25519 [email protected]
```

Il est possible d'utiliser **des syntaxes différentes** en fonction de votre [fichier de configuration SSH](/blog/cours/utiliser-la-configuration-ssh-client).

## Sources:
Vous pouvez ainsi agir sur les comportements par défaut de votre client SSH et notamment quel clé utiliser en fonction de tel ou tel serveur.


## Aller plus loin avec les sources

- https://fr.wikipedia.org/wiki/Secure_Shell
2 changes: 1 addition & 1 deletion content/blog/cours/docker-avec-windows-et-wsl.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ Pour terminer la commande `docker ps` devrait vous renvoyer l'écran ci-dessous:
</figcaption>
</figure>

## Allez plus loin avec les sources
## Aller plus loin avec les sources

- https://learn.microsoft.com/fr-fr/windows/wsl/basic-commands
- https://learn.microsoft.com/fr-fr/training/modules/wsl/wsl-introduction/
Expand Down
2 changes: 1 addition & 1 deletion content/blog/cours/utiliser-la-configuration-ssh-client.md
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ Host server-hostname-1
On remarquera son utilisation dans l'exemple ci-dessus. Il s'agit du **hash [SHA1](https://en.wikipedia.org/wiki/SHA-1)** des tokens %l%h%p%r (Respectivement le nom d'hôte local (`%l`), le nom d'hôte distant (`%h`), le port de connexion distant (`%p`) et pour finir le nom d'utilisateur distant utilisé (`%r`)).
L'utilisation du token `%C` assurant à la fois, l'unicité de la connexion et l'obfuscation de ses détails sur le système de fichiers.

## Pour aller plus loin:
## Aller plus loin avec les sources

- Recommandations pour un usage sécurisé d'OpenSSH par l'ANSSI: [https://www.ssi.gouv.fr/uploads/2014/01/NT_OpenSSH.pdf](https://www.ssi.gouv.fr/uploads/2014/01/NT_OpenSSH.pdf)
- https://man.openbsd.org/ssh_config
Expand Down
Binary file added content/images/blog/2023/ansible/ssh-keygen.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added content/images/blog/2023/ansible/ssh.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 931608b

Please sign in to comment.