Connexion SSH par clé privé / clé public

Il y a plusieurs possibilités pour se connecter à une machine en SSH.

La 1ère méthode consiste à entré le mots de passe de l’utilisateur pour ce connecter au système. Cette méthode est fiable si le mot de passe est vraiment très fiable!

En effet, lors d’une attaque brut de force (génération de mots de passe aléatoire afin de trouver le bon mot de passe), le système tiendra plus ou moins de temps en fonction de la complexité du mot de passe.

La 2ème méthode, à priori beaucoup plus sûr, consiste à générer une clé pour l’utilisateur et autoriser cette clé du coté du serveur.

Cette méthode a pour avantage de pouvoir désactivé assez facilement une clé si celle si se trouve compromise (çad si elle a été récupéré, ou si elle n’est pas assez fiable – hein le openssl buggé de debian !!;))

La clé permet de garantir à un système qu’un utilisateur est bien celui qu’il prétend être.

c’est à dire : » C’est bien moi et je te le prouve ».

Ce petit tuto a pour objectif la mise en place rapide de l’authentification par clé privé / clé public.

Pour que l’authentification par clé fonctionne, il y a 3 composants qui entre en jeu :

  • Une clé publique : c’est elle qui sera communiqué au système hôte sur lequel on souhaite pouvoir se connecter.
  • Une clé privée : elle permet de prouver son identité aux serveurs. A garder bien secret et ne jamais la communiquer !
  • Une passphrase : Permet de sécuriser la clé privée avec une phrase qui fait office de « mots de passe ».

1° – Création de la paire de clé publique / privé

 

Pour créer le couple de clé, nous allons utiliser l’outil ssh-keygen.

Il existe 2 types de clé :

  • RSA : Rivest Shamir Adleman : Rivest Shamir Adleman ou RSA est un algorithme asymétrique de cryptographie à clé publique, très utilisé dans le commerce électronique, et plus généralement pour échanger des données confidentielles sur Internet. Cet algorithme a été décrit en 1977 par Ron Rivest, Adi Shamir et Len Adleman, d’où le sigle RSA. RSA a été breveté [1] par le MIT en 1983 aux États-Unis d’Amérique. Le brevet a expiré le 21 septembre 2000.Plus d’info sur wikipedia : http://fr.wikipedia.org/wiki/Rivest_Shamir_Adleman
  • DSA : Digital Signature Algorithm : Digital Signature Algorithm, plus connu sous le sigle DSA, est un algorithme de signature numérique standardisé par le NIST aux États-Unis, du temps où le RSA était encore breveté.
    Cet algorithme fait partie de la spécification DSS pour Digital Signature Standard adoptée en 1993 (FIPS 186). Une révision mineure a été publiée en 1996 (FIPS 186-1) et le standard a été amélioré en 2002 dans FIPS 186-2. Il est couvert par le brevet n° 5 231 668 aux USA (26 juin 1991) attribué à David Kravitz, ancien employé de la NSA, et il peut être utilisé gratuitement. Plus d’info sur wikipedia : http://fr.wikipedia.org/wiki/Digital_Signature_Algorithm

Il existe également plusieurs longueurs de clé, on part du principe « plus elle est longue, plus elle sera dur à casser ».

Voici les différentes longueurs les plus couramment utilisées : 1024, 2048, 4096, 8192.

La longueur 1024 est à proscrire dans le sens ou certain expert estime que d’ici quelque temps elle sera cassé.

Personnellement je tape directement dans le 4096 voir 8192 (j’suis un peu parano des fois mais bon ça m’a sauvé la vie plusieurs fois :))

Donc pour créer une paire de clé de longueur 4096 utilisant l’algorithme RSA, voici :

 # ssh-keygen -t rsa -b 4096 -C user@domain.tld

 

Le chemin ou stocker la clé vous sera demandé, puis la passphrase. Ce qui donne en utilisation réelle :

wimpy@cdulux:~/.ssh$ ssh-keygen -t rsa -b 4096 -C toto@freenux.fr 

Generating public/private rsa key pair. 
Enter file in which to save the key (/home/wimpy/.ssh/id_rsa): /home/wimpy/.ssh/id_rsa 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/wimpy/.ssh/id_rsa. 
Your public key has been saved in /home/wimpy/.ssh/id_rsa.pub. 
The key fingerprint is: b8:19:df:60:f2:eb:34:df:e3:3a:93:f8:18:21:1d:6e wimpy@freenux.fr

 

Donc 2 fichiers seront générés suite à cette commande :

  • id_rsa ou id_dsa dans le cas d’une clé RSA ou DSA qui contient la clé privée. Cette clé ne doit pas être dévoilé !!! Elle garanti votre identité !
  • id_rsa.pub ou id_dsa.pub dans le cas d’une clé RSA ou DSA qui contient la clé publique. Cette clé sera mise sur les serveurs dont l’accès est voulu.

2° : Configuration du serveur

 

Ensuite il faut s’assurer que le serveur SSH gère l’authentification par clé.

Pour cela éditer le fichier /etc/ssh/sshd_config et modifier les paramètres suivant : Décommenter ou ajouter la ligne suivante :

 PubkeyAuthentication yes

 

Puis il suffit de relancer le serveur SSH :

Pour debian-like :

 /etc/init.d/ssh restart

 

Pour redhat-like :

 service sshd reload

3° : mise en place de la clé publique sur le serveur

 

La aussi rien de bien compliquer !

Dans le principe, il suffit de mettre le contenu de la clé publique dans le fichier authorized_keys du compte distant sur lequel on veut se connecter.

 cat ~/.ssh/id_rsa.pub | ssh utilisateur@serveur "cat - >> ~/.ssh/authorized_keys"

[Commande barbar a détaiilé :)]

4° : Ne plus avoir à retaper la passphrase à longueur de journée

 

Dans un 1er temps, lancer le ssh-agent afin que le deamon tourne :

wimpy@cdulux:~$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-FVnYX11105/agent.11105; export SSH_AUTH_SOCK; SSH_AGENT_PID=11106; export SSH_AGENT_PID; echo Agent pid 11106;

 

Ensuite il faut ajouter votre clé privé pour faire connaitre à ssh-agent la passphrase associé à la clé :

wimpy@cdulux:~$ ssh-add .ssh/id_rsa Enter passphrase for .ssh/id_rsa: Identity added: .ssh/id_rsa (.ssh/id_rsa)

 

Et voilou, plus besoin de la retaper à chaque connexion :)


Article lu 2885 fois

One comment

  1. mem32 dit :

    Article intéressant !
    Par contre, il est très difficile de vous lire étant donné le nombre impressionnant de fautes d’orthographe, de conjugaison, d’accords et de grammaire.
    Ma question, puisque j’accorde toujours le bénéfice du doute et que je ne jette jamais la pierre sans savoir : êtes-vous français ou du moins, le français est-il votre langue maternelle ?
    Je vous assure qu’il est dommage que votre maîtrise technique et votre grande pédagogie pâtisse de votre manque de maîtrise de la langue française.
    Si je puis me permettre et si le français n’est pas votre première langue, peut-être pourriez-vous faire relire l’article par un francophone ? Vous gagneriez grandement en crédibilité, je puis vous l’assurer.
    À part cela, encore une fois, très bon article qui m’a beaucoup aidé. Bonne chance pour la suite et merci pour le travail de grande pédagogie que vous faites !
    Bonne journée !

Laisser un commentaire