Créer une paire de clés SSH

Cet article fait partie d’une série d’articles sur SSH.
Mise à jour : 6 juin 2017

Créer une paire de clés SSH

$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

ssh-keygen est la commande à utiliser (sous Linux, MacOS, …) pour générer une paire de clés SSH (la publique et la privé) :

  • -t permet de spécifier le type de clé que l’on souhaite (RSA, ED25519, DSA, ECDSA, …) ;
  • -b permet de spécifier la longueur (en bits) de la paire de clés ;
  • -C permet de spécifier un commentaire, écrit en clair à la fin de la clé publique. C’est facultatif, mais cela permet par exemple de s’y retrouver dans la liste de clés publiques que l’on autorise sur son serveur. Je vous recommande d’utiliser votre adresse mail.

DSA, ECDSA, ED25519 ou RSA ?

La lecture de man ssh-keygen (sous Debian 3.16.39-1) nous apprend que « ssh-keygen can create […] DSA, ECDSA, ED25519 or RSA keys for use by SSH protocol version 2. The type of key to be generated is specified with the -t option. If invoked without any arguments, ssh-keygen will generate an RSA key for use in SSH protocol 2 connections ».

  • DSA : on oublie !
    « OpenSSH 7.0 and greater similarly disable the ssh-dss (DSA) public key algorithm. It too is weak and we recommend against its use » (source : openssh.com).
  • ECDSA : on oublie !
    Egalement déconseillé pour des raisons de sécurité (sources : 1 2).
  • ED25519 et RSA offrent une sécurité satisfaisante :
    • RSA a l’avantage d’être plus « ancien » et donc plus largement  accepté que ED25519 ;
    • Pour une sécurité équivalente (voire supérieure), ED25519 nécessité une clé plus courte que RSA, ce qui épargne des ressources CPU (source : 3).

En clair, RSA est un bon choix (si la longueur de clé est suffisamment importante, voir plus bas) car il offre une bonne sécurité et est largement utilisé.
Si vous souhaitez utiliser ED25519, voir ici.

Combien de bits ?

man ssh-keygen (sous Debian 3.16.39-1) nous apprend également que l’option -b « Specifies the number of bits in the key to create. For RSA keys, the minimum size is 768 bits and the default is 2048 bits. Generally, 2048 bits is considered sufficient. »

  • Dans cet article (et ici et ), on trouvera des données, liens et une courbe intéressante :

En clair, 2048 est un minimum qui assure une bonne sécurité en 2017, 4096 est un peu plus couteux en temps CPU mais permet de dormir sur ses trois oreilles.

Protégez votre clé privée SSH par mot de passe !

Il est franchement recommandé de protéger sa clé privée avec un mot de passe !

Sinon, la personne qui vous pique votre clé privée se fera passer pour vous (connexions, signatures, …) sans aucune difficulté. Et cela peut arriver plus vite qu’on ne le croit !

De surcroit, il est possible de demander à son OS favoris (Linux, MacOS, …) de mémoriser le mot de passe de la clé durant sa session, l’excuse de « j’en ai mare de taper le mot de passe à chaque fois » ne tient donc pas !

Exemple de création d’une paire de clés SSH

$ ssh-keygen -t rsa -b 4096 -C "valerian@reithinger.fr"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/valerian/.ssh/id_rsa):
Created directory '/home/valerian/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/valerian/.ssh/id_rsa.
Your public key has been saved in /home/valerian/.ssh/id_rsa.pub.
The key fingerprint is:
69:25:e6:b7:8b:8b:bb:0e:46:49:b0:08:bc:d9:62:03 valerian@reithinger.fr
The key's randomart image is:
+---[RSA 4096]----+
|o .              |
|Eo o             |
|o = . o .        |
| * o . o +       |
|. o o S .        |
|   . . . .       |
|    o   .        |
|   . . . . .     |
|     .=oo..      |
+-----------------+
  • Par défaut, les clés sont enregistrées dans /home/username/.ssh
    Il serait inconscient de changer les droits par défaut de la clé privée (lecture/écriture réservées au propriétaire), alors que la clé publique peut être distribuée sans aucun soucis (çà tombe bien, c’est son but)

    $ ls -Al ~/.ssh
    total 8
    -rw------- 1 valerian valerian 3326 janv. 30 18:56 id_rsa
    -rw-r--r-- 1 valerian valerian 748 janv. 30 18:56 id_rsa.pub
  • Contenu de la clé privée (exemple) :
$ cat .ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,95FDCE78FACAF970BD1E487752E170A9

yputiHx2TRWG+wNpAtJPdlodUO5ABK6dHv7dRGkCgavyU05R58gaazOrseeu0eQo
[bla bla bla]
CzaDdsBqPVbOmkIoSu64qchfNhgXxVV2LI8uLj5pvPcEDym/OpX6bxkrvJV+IJHb
-----END RSA PRIVATE KEY-----
  • Contenu de la clé publique (exemple) :

    $ cat .ssh/id_rsa.pub
    ssh-rsa AAAAB3NzaC1[bla bla bla]ZGjoL/5t4zqLLOmB5EpBg2ydBQ== valerian@reithinger.fr

Changer le mot de passe de sa clé SSH privée

$ ssh-keygen -f .ssh/id_rsa -p

Bien entendu, la clé privée « change » en apparence mais « son contenu déchiffré par le mot de passe est le même ». En conséquence, la clé publique qui lui est appairée n’est pas modifiée.

Une réflexion sur « Créer une paire de clés SSH »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *