SSH est le protocole le plus utilisé pour administrer des serveurs Unix à distance.
Il y a plusieurs façons de s’authentifier avec SSH, la plus courante étant l’utilisation d’un mot de passe associé à un compte UNIX sur le serveur distant.

Une autre méthode intéressante est l’utilisation d’une paire de clés privée/publique. Cette technique présente des avantages, le plus apprécié étant la possibilité de s’authentifier sans avoir à taper de mot de passe, ce qui est très pratique lorsque vous vous connectez à un grand nombre de systèmes très souvent.

Ce tutoriel va vous expliquer comment configurer une authentification avec clé publique sur un serveur sous Linux utilisant OpenSSH.

Configuration du serveur avec OpenSSH

La plupart des distributions viennent avec une configuration OpenSSH qui permet l’authentification par clé publique. Vous pouvez le vérifier avec la commande suivante :

root@srv# grep PubkeyAuthentication /etc/ssh/sshd_config
PubkeyAuthentication yes

Si la commande ci-dessous indique no, vous devrez éditer le fichier pour changer la directive à yes. La prochaine étape est de vérifier le chemin où sshd s’attend à trouver a liste des clés publique autorisées par chaque utilisateur.

root@srv# grep AuthorizedKeysFile /etc/ssh/sshd_config
#AuthorizedKeysFile     %h/.ssh/authorized_keys

Dans notre cas, la ligne est commentée mais indique la valeur par défaut utilisée par sshd, qui est un fichier “authorized_keys” dans le dossier “.ssh” du répertoire personnel de l’utilisateur qui s’authentifie.

Si vous avez dû modifier le fichier de configuration, vous devrez recharger le service OpenSSH. Sur Debian, la commande pour le faire est sudo service ssh restart.


Génération de la paire de clés SSH

Nous allons parcourir les étapes nécessaires à la génération de la paire de clés. Une paire de clé se compose de deux élements : une clé publique, qui est l’équivalent d’une serrure, qui ne peut être déverouillée qu’avec la clé privée associée. Si la clé privée, comme son nom l’indique, doit rester secrete, la clé publique peut quant à elle être diffusée publiquement.

Sur un système UNIX

Sur un système UNIX, vous pouvez générer une paire de clés avec la commande ssh-keygen.

user@client$ ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:cDdknmLaNIM123aljewdSwUVIZ1L58OjJoLHI05nw user@client
The key's randomart image is:
+---[RSA 2048]----+
|  +   . +==OX*.o.|
|       =.l+Xo=.+ |
|      + J @.E o o|
|       B B + . z |
|      . X        |
|           @     |
|    .            |
|                 |
|                 |
+----[SHA256]-----+

Nous vous suggérons de positionner une passphrase pour protéger votre clé privée au cas où celle-ci serait compromise.

La commande a généré deux fichiers dans le dossier .ssh subdirectory in your home directory:

  • id_rsa, la clé privée ;
  • id_rsa.pub, la clé publique.

Votre clé privée sera utilisée par votre client SSH pour s’authentifier auprès du serveur. Pour que cela fonctionne, vous allez maintenant devoir installer votre clé publique dans votre compte sur le serveur.

Si vous avez laissé le chemin par défaut lors de la génération de votre clé, celle-ci sera automatiquement utilisée par ssh. Sinon, vous devrez utiliser l’option -i pour préciser le chemin vers la clé.

Sur un système Windows

Sur Windows, vous aurez besoin d’un outil comme PuTTYgen pour gérer et générer des clés SSH.
Voici un descriptif des étapes à suivre pour générer la clé :

Vous devez maintenant copier la clé publique affichée dans la zone de texte vers votre presse-papier.

Sauvegardez bien votre clé privée sur votre système de fichiers. PuTTY en aura besoin pour s’authentifier.

Installation de la clé publique ssh sur le serveur

Connectez vous au serveur en utilisant votre mot de passe. Ensuite, créez un dossier .ssh s’il n’existe pas déjà.

Vous pouvez maintenant ajouter votre clé publique au fichier .ssh/authorized_keys grâce à cette commande :

user@client$ cat >> .ssh/authorized_keys << EOF
> ssh-rsa AAAAC30cjdlAAEAAAAA09dFLw0f/Vjqw92ovjCLiw08f [...] DjfcajoW== user@client
> EOF

C’est tout !

Se connecter en SSH

Depuis un système UNIX

Connectez-vous comme d’habitude à l’aide de la commande ssh. Si vous avez stocké votre clé privée dans un chemin différent de celui par défaut, n’oubliez pas de spécifier l’option -i suivie du chemin vers la clé.

Si vous avez protégé votre clé privée par un mot de passe, celle-ci vous sera demandée pour déverouiller votre clé privée.

Ensuite, vous devriez être connecté !

Depuis un système Windows

Dans PuTTY, vous devez éditer votre session pour spécifier le chemin vers le fichier .ppk généré par PuTTYgen. Cela se fait dans la section Connection > SSH > Auth, dans le paramètre Private key file for authentication.

Conclusion

L’authentification par clé est plus sécurisée que l’utilisation d’un simple mot de passe. Cette sécuritée est renforcée par l’utilisation d’un mot de passe pour protéger la clé privée, et encore davantage en interdisant l’authentification par mot de passe dans la configuration du serveur SSH.

Dans un futur tutoriel, nous étudierons l’utilisation d’un agent SSH pour stocker de manière temporaire des clés déverrouillées et ainsi permettre la connexion sans avoir de mot de passe à taper.

Mettre en place une authentification par clé SSH