Clé SSHCet article décrit la mise en place d’une connexion SSH sans mot de passe, à l’aide d’une paire de clés. Si l’on se connecte quotidiennement à une machine distante, la connexion SSH sans mot de passe évite d’avoir à saisir le mot de passe à chaque fois. Dans l’exemple ci-dessous, l’utilisateur kikinovak souhaite se connecter depuis la machine alphamule.microlinux.lan à la machine amandine.microlinux.lan sans avoir à saisir son mot de passe à chaque connexion.

Générer la paire de clés

Sur la machine alphamule.microlinux.lan, je crée une clé d’identification SSH :

$ ssh-keygen -t rsa -b 16384
Generating public/private rsa key pair.

AstucePour plus de sécurité, j’ai spécifié une clé d’une longueur de 16384 bits, ce qui constitue d’ailleurs la taille maximale. Ne vous étonnez pas si la génération de la clé met quelques minutes, même sur une machine puissante.

J’accepte l’emplacement par défaut pour la sauvegarde de la clé :

Enter file in which to save the key (/home/kikinovak/.ssh/id_rsa): [Entrée]

Je laisse la zone du mot de passe vide :

Enter passphrase (empty for no passphrase): [Entrée]
Enter same passphrase again: [Entrée]

Je viens de créer une clé privée ~/.ssh/id_rsa et une clé publique ~/.ssh/id_rsa.pub :

Your identification has been saved in /home/kikinovak/.ssh/id_rsa.
Your public key has been saved in /home/kikinovak/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:bZweuDaCB7iYxanGjFbpkyzcHxkzHO1OBkqUGPaUH9g kikinovak@alphamule
The key's randomart image is:
+---[RSA 16384]---+
| .. +.+o         |
| ..+.O..         |
|. +.OoO o        |
| . B.E B         |
|.   = * S        |
|.   .= o .       |
| . .o.+o ..      |
|  .+ += o  .     |
|  . =. +...      |
+----[SHA256]-----+
$ tree -a .ssh/
.ssh/
├── id_rsa
├── id_rsa.pub
└── known_hosts

0 directories, 3 files

L’algorithme de chiffrement

Lorsque vous générez une paire de clés avec ssh-keygen, l’option -t permet de spécifier l’algorithme de chiffrement. Sans trop rentrer dans les détails (man ssh-keygen), voici une vue d’ensemble sur ces différents algorithmes :

  • dsa : à éviter.
  • rsa : sûr avec une longueur de clé supérieure ou égale à 4096 bits.
  • ed25519 : sûr.

Alternativement, j’aurais très bien pu générer ma paire de clés comme ceci :

$ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
...

Dans ce cas, je me serais retrouvé avec une clé privée ~/.ssh/id_ed25519 et une clé publique ~/.ssh/id_ed25519.pub :

$ tree -a .ssh/
.ssh/
├── id_ed25519
├── id_ed25519.pub
└── known_hosts

0 directories, 3 files

Transférer la clé publique

Maintenant, il faut transférer la clé publique (et non pas la clé privée) sur la machine distante, en l’occurrence amandine.microlinux.lan :

[kikinovak@alphamule:~] $ ssh-copy-id -i .ssh/id_rsa.pub amandine.microlinux.lan
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".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
kikinovak@amandine.microlinux.lan's password: 

Number of key(s) added: 1

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

Contrôler les clés installées

À présent, on peut se connecter à la machine distante :

[kikinovak@alphamule:~] $ ssh amandine.microlinux.lan
Last login: Fri Nov 25 22:34:46 2022 from alphamule.microlinux.lan

Notez que nous ne sommes pas obligés d’utiliser le FQDN (Fully Qualified Domain Name). Nous pouvons très bien utiliser le nom d’hôte simple pour la connexion :

[kikinovak@alphamule:~] $ ssh amandine
Last login: Fri Nov 25 22:34:46 2022 from alphamule.microlinux.lan

Sur la machine distante, la clé publique transférée apparaît dans le fichier ~/.ssh/authorized_keys:

[kikinovak@nestor:~] $ cat ~/.ssh/authorized_keys
AAAAB3NzaC1yc2EAAAADAQABAAABAQC2QQSfCGvvt7T9Fx/iSUIe1c/7c6wfQ0sdpF
t6tmhvPWRgwjfxhB4XZLZnEduUAfEcxgjsZ/fw4kIYWKlcndnOdeiUxCz1ebSg1+4H
KBMBLtWEjg1koKZEoX6hnYatah0ngaga7hMiY2v66MdsjZam00cheLOom0g2s2l0op
8Q4o6QBJOn3L4VgeEZbPYw8fs/IXmSscoCGkUmMlmUo0Mka/Gv96ccSAsSywANaKlD
2n0X2dRyWHhTMHc7J047xyCxa0c6A1NeoX6sn8oI3pECIJEoZ4ml1OQfj3VPGFCNoL
+WciQRf kikinovak@alphamule

Se connecter sous une autre identité

Admettons que je sois l’utilisateur kikinovak sur la machine locale et que je souhaite me connecter en tant qu’utilisateur microlinux sur la machine distante betadine.microlinux.fr. Voilà comment cela se présenterait :

$ ssh-copy-id -i .ssh/id_rsa.pub microlinux@betadine.microlinux.fr
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".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
microlinux@betadine.microlinux.fr's password: 

Number of key(s) added: 1

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

Et si la clé existe déjà ?

Dans certains cas de figure, et notamment après la réinstallation d’une machine, on peut se retrouver confronté à l’avertissement suivant :

/usr/bin/ssh-copy-id: WARNING: All keys were skipped because they already exist on
the remote system. (if you think this is a mistake, you may want to use -f option)

On pourrait très bien utiliser l’option -f pour forcer le transfert de la clé publique. Une approche plus propre consiste à se connecter au préalable à la machine distante pour faire un brin de ménage dans le fichier ~/.ssh/authorized_keys.

Se connecter sans mot de passe

Dorénavant, la connexion SSH ne requiert pas la saisie du mot de passe :

[kikinovak@alphamule:~] $ ssh amandine
Last login: Tue Nov 29 10:16:16 2022 from alphamule.microlinux.lan
[kikinovak@amandine:~] $ exit
déconnexion
Connection to amandine closed.
[kikinovak@alphamule:~] $ ssh microlinux@betadine.microlinux.fr
Last login: Sat Oct 15 00:04:08 2022 from 88.161.127.212
[microlinux@sd-100246:~] $ exit
logout
Connection to betadine.microlinux.fr closed.

La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

 


2 commentaires

Tux · 24 juillet 2024 à 18 h 51 min

Bonsoir

Pourquoi ne pas mettre de passphrase lors de la génération car pourtant cela apporte une sécurité supplémentaire ?

    kikinovak · 24 juillet 2024 à 19 h 06 min

    Pour éviter d’avoir à la retaper à chaque connexion.

Laisser un commentaire

Emplacement de l’avatar

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