A l'heure actuelle, la totalité des distributions GNU/Linux fournissent aussi bien le serveur que le client SSH. Du fait de cette grande diffusion, un certain nombre de documentations ont été écrites, aussi bien en français que dans toutes les autres langues. Il s'agit souvent, malheureusement, de papiers très théoriques, et l'utilisateur n'est guère avancé quand à l'utilisation effective de SSH.
Nous allons, avec cet article, tenter d'aborder l'aspect pratique de la mise en oeuvre d'un serveur sshd ainsi que l'utilisation du client et des divers éléments de contrôle. Mais avant d'entrer dans le vif du sujet, passons tout de même par la case présentation, histoire de voir de quoi on parle.
SSH
SSH est un logiciel fournissant des fonctionnalités semblables à rlogin, rsh, rshd et rcp, mais dont les connexions entre les machines cliente(s) et serveur sont chiffrées. Le principal problème de ces équivalents historiques était de transmettre toutes les informations en clair sur le réseau (LAN ou Internet). Ceci ouvrait la porte à des attaques très importantes, puisqu'il suffisait à l'attaquant d'écouter le réseau avec un utilitaire adéquat (comme le simple tcpdump) pour non seulement assister en direct à tous les échanges entre clients et serveurs mais également, par la même occasion, voir tous les mots de passe transiter.
rlogin, rsh et rcp ne sont pas les seuls programmes à procéder de la sorte; la majorité des protocoles traditionnels échangent toute information en clair sur le réseau. C'est le cas de FTP, HTTP, POP3, IMAP, NFS et tant d'autres. De base, SSH permet de remplacer les utilitaires fournissant une connectivité à distance pour le shell. Nous verrons plus loin dans cet article qu'il est parfaitement possible, grâce à SSH, de sécuriser des protocoles déjà existants.
Nous l'avons dit, SSH chiffre la communication pour éviter les écoutes passives. Mais SSH apporte d'autres fonctionnalités très intéressantes en termes de sécurité. Il propose par exemple un système d'authentification des machines en présence. Normalement, une machine est identifiée par une adresse ou un nom. Malheureusement, ces informations peuvent facilement être utilisées par un attaquant pour faire croire que sa machine est l'une des deux autorisées (client ou serveur). SSH permet d'ajouter une couche d'authentification en identifiant les parties en présence à l'aide d'une clef. Ainsi, si usurper une adresse ou un nom de machine est quelque chose de relativement facile, obtenir une clef est presque impossible.
Concernant le logiciel lui-même, SSH est originellement un logiciel propriétaire, certes libre d'utilisation dans un but non commercial, mais cela n'est pas suffisant dans une optique qui est celle que nous défendons. Voilà pourquoi la quasi-totalité des utilisateurs préfèrent OpenSSH, qui est une implémentation Libre (licence BSD). OpenSSH repose entièrement sur une bibliothèque de fonctions nommée OpenSSL et utilisable sous les termes d'une licence de type Apache. OpenSSL contient tous les éléments cryptographiques nécessaires au fonctionnement d'OpenSSH.
Protocoles
Le protocole SSH existe en deux versions majeures. SSH1, le premier (historiquement) se décline en deux sous-versions notées 1.3 et 1.5. L'autre version du protocole, SSH2, est plus récente et corrige également quelques erreurs de conception. Sans rentrer dans le détail, SSH1 utilise un CRC (somme de contrôle) pour assurer l'intégrité des données transmises. Ce procédé étant trop faible, SSH2 l'a remplacé par un autre algorithme nommé HMAC. Autre changement majeur, SSH1 était monolithique alors que SSH2 divise le protocole en couches qui sont documentées dans des RFC différentes.
OpenSSH supporte aussi bien SSH1 (1.3 et 1.5) que SSH2 dans sa version la plus récente (OpenSSH 2.9.9).