SSH - Secure Shell

Objectif

  • Se familiariser avec le protocole SSH (Secure SHell).

Mise en situation

SSH est une application d'Internet qui n'est pas aussi connue que le Web ou le mail.

Mais elle est très utile dans le monde du développement informatique car elle permet de se connecter à un serveur à distance, puis d'exécuter des commandes sur ce serveur. C'est aujourd'hui le mode de contrôle privilégié des informaticiens sur les serveurs qui font fonctionner Internet.

RappelTerminal et shell

Le terminal (aussi appelé invite de commande ou console) est le moyen le plus naturel pour interagir avec un ordinateur. Ce programme offre un shell (une interface système) donnant accès aux programmes de l'ordinateur. Il suffit d'un écran et d'un clavier pour utiliser ce shell.

DéfinitionLe programme SSH (Secure SHell)

Le programme SSH (Secure Shell) permet d'interagir de manière sécurisée avec un ordinateur distant via un shell. C'est le programme de référence pour effectuer des opérations à distance.

Toutes les commandes tapées depuis un clavier d'ordinateur à un emplacement A sont exécutées dans le shell d'un ordinateur à un emplacement B. Les informations qui transitent sur Internet via SSH sont les chaînes de caractères représentant les commandes à exécuter et les chaînes de caractères représentant les résultats de ces exécutions.

DéfinitionLe protocole SSH

SSH est aussi le nom du protocole de communication utilisé par le programme SSH. Ce protocole fonctionne sur une architecture client-serveur ; l'ordinateur qui fournit les commandes est le client et l'ordinateur qui exécute les commandes sur son système est le serveur.

SSH repose généralement sur TCP pour le transport et est par défaut associé au port 22.

L'établissement d'une connexion SSH se fait en deux étapes :

  • l'établissement d'une communication sécurisée,

  • l'authentification du client.

RappelChiffrement symétrique et chiffrement asymétrique

Le chiffrement symétrique repose sur le chiffrement et le déchiffrement de messages par une seule clé appelée clé symétrique. Ainsi, si deux ordinateurs veulent protéger leurs communications, ils peuvent se mettre d'accord sur une clé symétrique à utiliser et veiller à ce qu'ils soient les seuls à la détenir. Le chiffrement symétrique est rapide mais nécessite un canal sécurisé pour échanger la clé.

Le chiffrement asymétrique repose sur le chiffrement et le déchiffrement de messages par deux clés différentes (l'une chiffre les messages et l'autre déchiffre). Dans ce système, une clé est connue de tous : on parle de clé publique ; l'autre clé est gardée secrètement : on parle de clé privée. Le chiffrement asymétrique est plus lent mais ne nécessite par de canal sécurisé préalable.

MéthodeÉtablir une connexion SSH

On utilise la commande ssh depuis un terminal :

1
ssh alice@serveurSSH.exemple.com

La machine se trouvant à l'adresse serveurSSH.exemple.com doit avoir un utilisateur alice. Si ssh se connecte pour la première fois au serveur, l'utilisateur devra accepter d'utiliser la clé publique du serveur pour des raisons de sécurité.

Sur Windows, Putty est un client SSH qui permet d'ouvrir une console sous SSH. Il est téléchargeable sur le site dédié : https://www.putty.org/

ComplémentÉtape 1 : Établissement d'une communication sécurisée

Au début de la session et avant de commencer toute interaction entre le client et le serveur, c'est-à-dire avant même que le serveur vérifie que le client est légitime, les deux ordinateurs doivent se mettre d'accord sur un moyen de sécuriser leur communication.

Pour cela, le client et le serveur se mettent d'accord via le protocole de transport (TCP) sur la version du protocole SSH à utiliser et sur une méthode de chiffrement symétrique de leur communication.

Les deux ordinateurs vont utiliser des méthodes de chiffrement asymétrique pour échanger une clé symétrique. Cette clé leur permettra donc de protéger toutes les communications suivantes de la session.

À la fin de cette étape, une connexion sécurisée est établie entre le client et le serveur.

ComplémentÉtape 2 : Authentification de l'utilisateur côté client

Une fois une connexion sécurisée établie, le serveur doit authentifier l'utilisateur qui cherche à se connecter. Il existe deux méthodes d'authentification :

  • Méthode 1 : Par mot de passe

    Puisque le but est ici d'ouvrir un shell à distance, le client cherche à se connecter à un utilisateur de la machine distante. Le serveur peut ainsi demander au client le mot de passe de l'utilisateur via lequel il veut se connecter.

  • Méthode 2 : Par clé

    Chaque utilisateur présent sur le serveur possède une liste de clés publiques de clients de confiance, présentes dans un fichier authorized_keys.

    1. Le client envoie une des clés publiques de l'utilisateur avec lequel il veut se connecter.

    2. Le serveur vérifie le fichier authorized_keys de l'utilisateur pour s'assurer que cette clé publique existe.

    3. Si oui, le serveur chiffre un nombre aléatoire avec ladite clé publique et envoie le résultat au client.

    4. Le client utilise sa clé privée pour déchiffrer le nombre et y appliquer un certain traitement avant de le renvoyer au serveur.

    5. Le serveur applique le même traitement au nombre qu'il a envoyé et vérifie que le résultat du client est le même que le sien.

    6. Si le résultat est correct, et comme l'utilisateur est le seul à posséder la clé privée et déchiffrer le nombre envoyé par le serveur, il est authentifié.

Complément

La méthode d'authentification par clé nécessite qu'une paire de clés publique/privée soit générée au préalable, et que le serveur ait stocké la clé publique du client dans le fichier authorized_keys de l'utilisateur.

ComplémentInstaller un serveur SSH sur un serveur

Pour rendre un serveur accessible à distance, il faudra installer et lancer un serveur SSH. L'implémentation de référence est OpenSSH que l'on peut installer et activer ainsi sur des serveurs GNU/Linux de la famille Debian.

1
sudo apt update
2
sudo apt install openssh-server
3
sudo systemctl start ssh

À retenir

  • Le protocole SSH permet à un client d'ouvrir un shell sur un serveur distant.

  • Ce protocole sécurise les communications en employant plusieurs méthodes de chiffrement, de l'authentification au transfert de données.

Informations[1]
Stéphane Crozat, Youssef El Saadany, Quentin Duchemin Paternité - Partage des Conditions Initiales à l'Identique