Configurer openSSH pour s'authentifier avec clefs RSA seulement

on . Posted in Tutoriels

Attention, cet article assume que vous avez un minimum de connaissance et de pratique sur les systèmes Linux Dans le cas présent j'utilise une distribution Debian sur un RaspberryPi, une distrib Debian ou Ubuntu (ou tout autre dérivé de Debian) sur plateforme i386, x64 ou ARM aura les mêmes comportements. Le serveur SSH utilisé - OpenSSH - est issu de FreeBSD, et est le même disponible sur beaucoup de distribution Linux.

Tout d'abord un peu de vocabulaire:

  • SSH: c'est le protocole de communication;
  • ssh: c'est le logiciel client;
  • sshd: c'est le serveur;
  • RSA: algorithme de chiffrement par clefs asymétriques.

 

Intro

Avec le protocole SSH on peut se connecter en utilisant le couple Login/MotdePasse standard, ou par clef RSA. Je vais expliquer ici comment désactiver l’authentification par mot de passe et ne laisser que celle par clef RSA afin de mieux protéger l'accès à votre ordinateur distant. Tout d'abord on va jeter un œil dans le fichier de configuration de sshd qui se trouve ici: "/etc/ssh/sshd_config". Les paramètres qui nous intéressent sont:

  • PubKeyAuthentication Autorise l'authentification par clefs publiques (RSA)
  • AuthorizedKeysFile Emplacement du fichier comportant les clefs publiques authorisées à se connecter
  • PasswordAuthentication Autorise l’authentification par login/motdepasse

On verra plus bas les valeurs à leur donner

Les mains dans l'cambouis

Générer les clefs

Dans le cas présent, comme je fais la configuration de mon serveur depuis Windows via ssh, je vais générer les clefs à distance sur mon serveur linux (c'est plus pratique pour moi, tout ce dont j'ai besoin pour le faire est déjà installé), et je devrai donc les rapatrier ensuite sur mon client. On va commencer par générer la paire de clefs RSA:

ssh-keygen [-C description]

voici ce que ça donne.

pi@RaspiNAS ~ $ ssh-keygen -C cleftutopi
Generating public/private rsa key pair.
Enter file in which to save the key (/home/pi/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/pi/.ssh/id_rsa.
Your public key has been saved in /home/pi/.ssh/id_rsa.pub.
The key fingerprint is:
2f:a9:f5:63:00:1c:81:dc:40:94:23:7d:c6:27:e1:3f cleftutopi
The key's randomart image is:
+--[ RSA 2048]----+
|   =+*oo         |
|  . *.B .        |
|   . =.+         |
|      o.         |
|       .E        |
|        .+       |
|        +..      |
|       o oo      |
|      .  ...     |
+-----------------+

Pour le chemin des fichiers de sortie vous pouvez mettre ce que vous voulez, moi j'ai laissé celui par défaut et mes fichier sont:

/home/pi/.ssh/id_rsa
/home/pi/.ssh/id_rsa.pub

Il est conseillé de renseigner une PassPhrase afin de protéger la paire de clefs. Ensuite, si comme moi vous avez généré la paire de clefs sur la machine hôte (celle qui exécute le serveur) copiez vos fichiers "id_rsa" et "id_rsa.pub" sur votre machine locale, pensez ensuite à supprimer "id_rsa" de la machine distante (c'est la clef privée, et comme son nom l'indique, mieux vaut ne pas la laisser trainer).

Le serveur sur lequel vous voulez vous connecter n'a besoin que de la clef publique. Elle servira à vérifier l'identité du client à la connexion, puis à chiffrer les messages destinés au client pendant la communication.
La clef privée elle, n'appartient qu'au propriétaire (vous) et lui sert à s'identifier et déchiffrer les messages qu'il reçoit. Elle se trouve dans le ficher id_rsa et est accompagnée de sa clef publique.

Activer la clef publique

Maintenant il faut ajouter cette nouvelle clef publique à la liste des clefs autorisées. Par défaut ce fichier se trouve ici "/home/user/.ssh/authorized_keys" , si vous choisissez un autre emplacement notez le on en aura besoin plus tard. Pour ajouter la clef vous pouvez faire un bête copier/coller ou bien taper cette commande:

cat /home/pi/.ssh/id_rsa.pub >> /home/pi/.ssh/authorized_keys

En remplaçant bien sur les chemins des fichier par les vôtres. Vous pouvez maintenant supprimer "id_rsa.pub" de votre machine hôte puisque la clef vient d'être copiée dans le fichier authorized_keys. Et voilà on peut se connecter en utilisant notre clef (pour ceux qui ne savent pas configurer le client ça arrive ^^). Évidemment pour le moment on peut encore se connecter avec le mot de passe standard, mais on va quand même configurer le client et vérifier que ça marche avant de griller la solution de secours. Pour les petits malins qui ont voulu mettre un autre chemin que celui par défaut pour le fichier "authorized_keys" il faut éditer le fichier "/etc/ssh/sshd_config" et adapter la valeur du paramètre AuthorizedKeysFile.

Configurer le client

Putty

Sur cette page téléchargez

  • putty.exe
  • pageant.exe
  • puttygen.exe

Lancez puttygen.exe et importez votre clef publique via le menu "Conversion", si vous avez mis une PassPhrase elle vous sera demandée. Puis cliquez sur enregistrer la clef privée, sauvegardez la où vous souhaitez et fermez puttygen.exe. A présent, pour vous connecter vous pourrez utiliser votre clef. Pour cela ouvrez cette dernière avec pageant.exe, entrez votre PassPhrase, et enfin lancez putty.exeet ouvrez la connesion, il tentera automatiquement l'authentification par votre clef préalablement chargée.

ConnectBot (android)

C'est plus simple qu'avec putty. placez votre clef privée à la racine de la carte mémoire du terminal (selon les appareils c'est la carte externe, sur d'autre c'est "sdcard" mais c'est la mémoire interne, les constructeurs font un peu ce qu'il veulent) puis lancez ConnectBot. Ouvrez le menu et allez dans "Gérer les clés publiques" (ce n'est pas correct il s'agit bien des clefs privée j'ai essayé il prend pas les clefs publiques) puis de nouveau dans le menu cliquez sur "Importer"; une liste des fichiers (uniquement ceux contenant du texte) à la racine de la mémoire s'affiche, sélectionnez votre clef, et c'est bon. Si votre clef n'apparait pas dans cette liste, c'est que vous ne l'avez pas mise au bon endroit. Indices:

  • Le nom du dossier vérifié est noté en titre de liste: "Récupérer depuis /sdcard" (mais c'est pas forcément le bon nom, sur ma tablette en vrai c'est sur /sdcard0)
  • Les fichiers listés (s'il y en a) peuvent vous aider à repérer le bon endroits.

Désactiver l'authentification par mot de passe

Et voilà, maintenant que vous pouvez vous connecter en ssh en utilisant votre clef RSA et non le mot de passe et que tout fonctionne bien on va pouvoir désactiver ce dernier afin de compléter ce procéssus visant à améliorer la sécurité de notre machine distante. Pour ça on édite le fichier de configuration (il est nécessaire d'avoir les droit ROOT pour ça) de sshd (pour les poissons rouge c'est ici "/etc/ssh.sshd_config" ) et on remplace cette ligne:

#PasswordAuthentication yes

par ceci

PasswordAuthentication no

Sauvez le fichier puis exécutez cette commande pour recharger la configuration de sshd

sudo /etc/init.d/ssh reload

Et voilà c'est tout beau ça marche.

 

Sources :