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.