Définition

SSH (Secure SHell) désigne un ensemble de programmes et de protocoles qui permettent de se connecter sur une machine distante de manière sécurisée.
Une implémentation libre de SSH est OpenSSH, livrée par une grande majorité de distributions (divers Unix, Linux et MacOSX).

Pourquoi

L'échange de clé de chiffrement en début de connexion permet d'échanger des trames chiffrées durant la connexion, empéchant ainsi l'utilisation d'un sniffer permettant de voir en clair ce que fait l'utilisateur.
L'utilisation de SSH permet ainsi d'éviter la compromission des mots de passe, qui circulent en «clair» sur le réseau. En outre, celà oblige à disposer d'une authentification renforcée des machines, pas seulement basée sur le nom ou l'adresse IP (qui peuvent être falsifés).
SSH permet donc d'exécuter en toute sécurité des commandes à distance (d'où le mot « shell »), de transférer des fichiers en toute sécurité et de sécuriser les sessions X11.
Pour toutes ces raisons, le protocole SSH permet de remplacer efficacement les programmes rlogin, telnet et rsh.

Explications

Les méthodes d'authentification :

Par mot de passe

Lors de la connexion, après avoir décliné son identité, l'utilisateur est invité à entrer un mot de passe qui est transmis au serveur, qui le compare à une empreinte du mot de passe associé à l'utilisateur. Le mot de passe en clair est encapsulé dans une communication secrète, et devient «inviolable» sur le réseau. L'apport de SSH sur telnet est que le mot de passe ne circule pas en clair (ainsi que la transmission des données).
Une variante plus sécurisé est l'utilisation de «mots de passe à usage unique».

Par clés publiques

Principe du chiffrement asymétrique :


1/ A envoit sa clé publique à B
2/ B envoit sa clé publique à A


A peut crypter les données destinées à la machine B avec la clé publique B.
La machine B peut décrypter ces données avec sa propre clé privée.
A peut donc maintenant envoyer en toute sécurité des données à B.


B peut crypter les données destinées à la machine A avec la clé publique A.
La machine A peut décrypter ces données avec sa propre clé privée.
B peut donc maintenant envoyer en toute sécurité des données à A.


A et B peuvent maintenant communiquer de manière chiffrée.

Les 3 étapes principales pour établir une connexion sont :

- Génération de «bi-clé asymétrique» (c'est à dire un couple clé-privée/clé-publique RSA ou DSA ) sur une machine, en général la machine cliente (si on utilise plusieurs machines clientes, on effectue cette génération en général sur une seule d'entre elles, puis on recopie les clés sur les autres). Ce bi-clé est stocké dans un sous-répertoire (par exemple ~/.ssh avec OpenSSH) de l'utilisateur.
- Copie de la clé publique sur les machines serveur sur lesquelles on souhaite pouvoir utiliser cette authentification. Celà consiste à ajouter la ligne correspondant à la clé publique présente dans le répertoire où elle a été générée (par exemple, le contenu du fichier ~/.ssh/id_dsa.pub) dans un fichier du serveur situé dans le répertoire de l'utilisateur (par exemple ~/.ssh avec OpenSSH). Le nom de ce fichier dépend de la version de SSH mais se nomme souvent authorized_keys ou authorization.
- Entrée de la «passphrase» au moment de le séquence de connexion. Afin d'automatiser l'entrée de la «passphrase», il est possible d'utiliser un utilitaire permettant de ne la rentrer qu'une seule fois par session locale : ssh-agent.