Authentification par clé SSH sur son serveur DEBIAN

Pour rappel SSH est un protocole de communication sécurisé. Il permet notamment de se connecter sur un serveur distant de manière sécurisé (contrairement à telnet par exemple).

Nous allons voir dans ce petit tuto comment se connecter à sa machine Debian via une authentification par clé. Nous aurons un serveur Debian qui sera POSTFIX et un client (ssh) Debian qui sera DEBIAN_ROUTEUR.

Lorsque vous installer un serveur Debian vous avez la possibilités lors de l’installation d’installer SSH serveur. Si ce n’est pas fait vous pouvez l’installer :

apt install openssh-server

Côté client il est normalement déjà installé sur chaque distribution Debian mais si ce n’est pas le cas :

apt install openssh-client

Une fois que cela est fait nous allons configuré le démon ssh sur POSTFIX :

vim /etc/ssh/sshd_config

Dans le fichier nous allons nous intéresser à l’instruction :

#PermitRootLogin yes

On décommente, on enregistre et on quitte. Je fait cela pour pouvoir me connecter avec un mots de passe en root. Je changerais cela après.

Puis on reload le service :

systemctl reload sshd.service

Dirigeons nous désormais vers le client « DEBIAN-ROUTEUR ».

Nous allons générer une clé publique et privé. La clé privé qui sera gardé précieusement sur notre client. Et la clé publique que l’on enverra sur notre serveur « POSTFIX » ou tous les serveurs où l’on souhaite s’authentifier par clés.

On génère la clé :

root@DEBIAN-ROUTEUR:~# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:fp2PVClDyfc6J631cqHrzvdtT9CNogYaAmXcTYjtFz4 root@DEBIAN-ROUTEUR
The key's randomart image is:
+---[RSA 2048]----+
|   .o+ +.        |
|   oo + o  . .   |
|  .  . . .  + .  |
|   .  . E  . . =.|
|    . ..S.  + = +|
|     . + . o * = |
|      . . + + = *|
|         o ..+.O=|
|            +==+B|
+----[SHA256]-----+

Explications :

Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.

Il demande où nous souhaiton enregistrés les clés nous allons laissés par défaut et il enregistrera dans « /root/.ssh/id_rsa ». Il créer ensuite le répertoire caché « Created directory ‘/root/.ssh’. »

Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 

Il demande ensuite une passphrase c’est très bien si vous la mettez ça permet de rajouter une sécurité en plus comme cela il vous faut à la fois la clé privé et la passphrase (qui n’est pas un mot de passe mais qui y ressemble 🙂 ). Pour le lab je n’ai rien mis.

Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

id_rsa : ma clé privé

id_rsa.pub : ma clé public

Je vais maintenant envoyé ma clé publique au serveur distant (POSTFIX) avec la commande « ssh-copy-id »

root@DEBIAN-ROUTEUR:~# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.217
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.1.217's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.1.217'"
and check to make sure that only the key(s) you wanted were added.

Je renseigne le mdp root de mon POSTFIX. La clé a bien été ajouté.

Je tente de me connecter à POSTFIX et je m’y connecte sans mots de passe !!! 😀

Restons sur POSTFIX tout à l’heure dans la configuration du démon sshd j’ai mis l’instruction « PermitRootLogin » à yes je vais à la place « without-password » cela veut dire que je pourrais me loguer avec l’user root sans mots de passe et uniquement par clés.

J’édite mon fichier :

vim /etc/ssh/sshd_config

Je change l’instruction

PermitRootLogin without-password

Et j’enregistre mon fichier et je reload ssh :

systemctl reload sshd.service

Si maintenant je tente de me connecté depuis une autre machine :

Impossible de s’y connecter.

Voilà j’ai pu sécuriser mon accès SSH via un système de clés privés/publique.

Pour information les clés publiques de mes clients ssh sont stockés dans le fichier « .ssh/authorized_keys »

C’est la fin de ce tuto ! A Bientôt 😉 .