Authentification par 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, créer une clé d’identification SSH. Accepter l’emplacement par défaut pour la sauvegarde de la clé en appuyant sur [Entrée]. De même, laisser la zone du mot de passe vide en appuyant deux fois sur [Entrée]. Ne vous étonnez pas si la génération de la clé met quelques minutes, même sur une machine puissante.

$ ssh-keygen -t rsa -b 16384
Generating public/private rsa key pair.
Enter file in which to save the key (/home/kikinovak/.ssh/id_rsa): [Entrée]
Enter passphrase (empty for no passphrase): [Entrée]
Enter same passphrase again: [Entrée]
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]---+
| ooo=            |
|..++ E.          |
|   o.o..         |
| ..o+.+  + .     |
|  =+.= +S *      |
|===..oO  + .     |
|=B.*.oo.+ .      |
|o . o..o .       |
|     .           |
+----[SHA256]-----+

On vient de créer une clé privée ~/.ssh/id_rsa et une clé publique ~/.ssh/id_rsa.pub.

[kikinovak@alphamule:~] $ tree -a .ssh/
.ssh/
├── id_rsa
├── id_rsa.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: Mon Dec 31 14:32:23 2018 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: Mon Dec 31 14:33:03 2018 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: Mon Dec 31 14:39:57 2018 from alphamule.microlinux.lan
[kikinovak@amandine:~] $ exit
déconnexion
Connection to amandine closed.
[kikinovak@alphamule:~] $ ssh microlinux@betadine.microlinux.fr
Last login: Mon Dec 31 11:32:14 2018 from nikikovacs.pck.nerim.net
[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

Tetsumaki · 28 janvier 2019 à 21 h 28 min

Salut,
C’est dommage d’utiliser RSA au lieu de ECDSA ou ED25519.
Il aurait été bien de parler de ssh-agent aussi concernant la partie passphrase.

Configurer l’authentification par clé SSH - My Tiny Tools · 31 décembre 2018 à 18 h 00 min

[…] (Source: Journal du hacker) […]

Répondre à Configurer l’authentification par clé SSH - My Tiny Tools Annuler la réponse

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.