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.
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 | | . .= . | +-----------------+
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
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
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
, …
4 ans ago ·
dommage de ne pas parler de la commande ssh-add