Authentification SSH par clé privée/clé publique

November 24, 2008

En voyant l’intérêt que les visiteurs de mon blog porte à l’installation d’un serveur de mail multi-domaines, j’ai décidé d’écrire un autre tutoriel sur la configuration d’un serveur SSH pour utiliser une connexion par clé publique/clé privée.

Fonctionnement

L’objectif d’une authentification par clés est de supprimer l’envoi de mots de passe par le réseau. Pour cela il faut deux clés : une clé privée (seul l’utilisateur doit pouvoir y avoir accès) et une clé publique (doit être déployée sur toutes les machines où l’on souhaite se connecter).

La clé publique peut crypter les données et seule la clé privée peut les décrypter. Dans l’autre sens la clé privée signe les messages, la clé publique permet alors de s’assurer que le message vient bien du bon utilisateur. C’est le cryptage asymétrique.

Pour SSH, c’est exactement la même chose. Le serveur envoi un challenge au client : message crypté à partir de la clé publique. La connexion ne sera acceptée uniquement si le client répond correctement à ce message (c’est à dire qu’il a réussi à décrypter le message).

Configuration du serveur SSH

Par défaut le serveur SSH n’accepte pas les connections par clés mais uniquement par mot de passe. On va donc activer cette méthode d’authentification :

Dans le fichier : /etc/ssh/sshd_config

RSAAuthentication    yes
PubkeyAuthentication yes
AuthorizedKeysFile   %h/.ssh/authorized_keys

Pour des questions de sécurité vous pouvez désactiver la connexion avec le login root :

PermitRootLogin no

Il suffit de redémarrer le serveur SSH : /etc/init.d/ssh restart

Si vous souhaitez refuser l’authentification par mot de passe (pour éviter les attaques bruteforce et ainsi que les logs se remplissent pour rien) il faut positionner l’option suivante :

PasswordAuthentication no

Création des clés

Il y a deux manières pour créer les clés :

  1. Sur un poste Linux :
    1. Lancer la commande suivante : ssh-keygen -t rsa
    2. Laisser les noms par défaut et entrer le mot de passe pour la clé privée.
  2. Sur un poste Windows :
    1. Utiliser PuttyGen pour générer les clés.

Ensuite il faut copier la clé publique id_rsa.pub sur le serveur auquel on souhaite se connecter et conserver la clé privée sur le poste client.

Dans le répertoire de l’utilisateur on crée un répertoire .ssh *(répertoire par défaut où le serveur SSH va chercher les clés publiques) et on renomme le fichier en *authorized_keys.

Ensuite il faut absolument que ce fichier ai les droits suivants : chmod 600 authorized_keys.

À partir de ce moment toutes les personnes ayant la clé privée et le mot de passe ayant servi à la générer peuvent se connecter au serveur.

Première connexion

Afin de se connecter avec Putty vous devez spécifier la clé privée : Connection / SSH / Auth.

Si vous avez créé votre paire de clés grâce à ssh-keygen, vous devez convertir votre clé privée au format Putty. Pour cela vous devez utiliser PuttyGen : menu Conversions / Import key, entrer alors le mot de passe de la clé, puis Save private key.

Lors de chaque connexion Putty vous demande le mot de passe de la clé, quel intérêt alors de se connecter en utilisant une paire de clé si on doit rentrer à chaque fois le mot de passe de la clé privée. C’est là qu’intervient Pageant, c’est un outils de la suite Putty qui permet de stocker pour une clé privée son mot de passe. L’utilisation de ce programme est extrêmement simple, je n’en parlerai donc pas ici. Pour Linux il suffit d’installer ssh-agent qui joue exactement le même rôle.