Mes passions, le boulots, mes coups de gueule...




Raspberry Pi : Authentification SSH par certificat

Catégories : Geek, Informatique, Mac, Raspberry Pi · par 25 Avr 2015

Introduction

Par défaut, lorsque nous nous connectons à notre Raspberry Pi en SSH, nous nous identifions par l’intermédiaire d’un login / mot de passe.

Nous avons vu dans l’article consacré à fail2ban que de nombreuses machines tentaient de se logger à notre serveur en testant de nombreuses combinaisons d’identification par force brute.

Pour parer à l’éventualité ou un pirate réussirait à trouver notre mot de passe, nous allons le désactiver et le remplacer par un certificat sous forme de clef privée, clef publique.

Mise en place

Génération de la paire de clefs

Sur le client, nous allons générer une paire de clefs (privée, publique) qui nous servira à nous connecter sur tous nos serveurs.

Il est préférable de réaliser cette opération sur le client pour éviter de transférer la clef privée vers le serveur ou d’y laisser sa trace.

Nous garderons donc notre clef privée bien au chaud sur notre ordinateur et enverrons uniquement la clef publique sur tous nos serveurs.

Pour commencer, dans le Terminal du client nous allons taper ceci :

$ ssh-keygen -t rsa -C "MonNom@MonOrdinateur"

« MonNom@MonOrdinateur » est un commentaire. Vous pouvez mettre ce que vous voulez. Il vous servira à repérer votre clef publique parmi d’autres dans le fichier ~/.ssh/authorized_keys que nous créerons plus tard sur le serveur.

La commande vous demandera d’indiquer le nom du fichier dans lequel sauver les clefs :

Generating public/private rsa key pair.
Enter file in which to save the key (/Home/User/.ssh/id_rsa):

Faites juste [ENTER]. La clef sera générée et placée dans le dossier .ssh/id_rsa (caché) de l’utilisateur courant du client qui génère les clefs.

Vous devrez ensuite choisir une phase de passe associée à votre paire de clef. Elle vous sera demandée lors de chaque connexion au serveur pour valider votre clef. Elle doit faire entre 10 et 30 caractères.
Vous pouvez vous en passer en faisant [Enter].

Enter passphrase (empty for no passphrase):

Entrez la phrase de passe une seconde fois pour confirmer qu’il n’y a pas de faute de frappe.

Enter same passphrase again:

Et la paire de clefs est générée.

Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.
The key fingerprint is:
ad:cd:d8:b8:73:23:e1:13:a6:49:ad:42:a6:d5:d8:c7 MonNom@MonOrdinateur
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|         .       |
|     + oS .      |
|    = + EB       |
|   = . B+o+      |
|  . . + =.o      |
|     .  .= .     |
+-----------------+

Ajout de la clef publique au fichier authorized_keys du serveur

Nous allons maintenant ajouter notre clef publique au fichier authorized_keys situé dans le dossier /home/user/.ssh du serveur pour permettre à chaque utilisateur de s’identifier avec sa clef privée. Ici, par défaut, user pourrait être l’utilisateur pi.

Le fichier authorized_keys peut contenir plusieurs clef publiques. Par exemple, si vous avez une clef pour chaque ordinateur qui s’y connecte. Ceci permet de supprimer une clef publique lorsque son pendant privé a été compromis.

Depuis le client; on tape :

$ cat ~/.ssh/id_rsa.pub | ssh <USERNAME>@<IP-ADDRESS> 'cat >> ~/.ssh/authorized_keys'

Une ligne sera ajoutée au fichier ~/.ssh/authorized_keys sur le serveur sous la forme :

ssh-rsa <TRES LONGUE CLEF CRYPTOGRAPHIQUE> MonNom@MonOrdinateur

Configuration de SSH Deamon (sshd)

Nous allons éditer le fichier de configuration de sshd :

$ sudo nano /etc/ssh/sshd_config

Dans le fichier, nous allons dé-commenter les lignes suivantes :

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

On enregistre le fichier et on redémarre ssh :

$ sudo service ssh restart

Si tout s’est bien passé, vous devriez pouvoir vous connecter sans entrer de mot de passe.

Vous pouvez rééditer le fichier sshd_config et modifier la ligne PasswordAuthentication en remplaçant yes par no :

$ sudo nano /etc/ssh/sshd_config
PasswordAuthentication no

Notes

Sur le serveur, le dossier /home/ de chaque utilisateur est indiqué dans le fichier /etc/passwd.

Ceci vous donnera une indication pour des utilisateurs particuliers comme : root, www-data, …

(1) Comment

Francois Nalin
4 ans ago · Répondre

dommage de ne pas parler de la commande ssh-add

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.