ssh - Connexion par clé privée - clé publique

Mise à jour : Debian 10.6 Buster

Ce document décrit comment remplacer dans une connexion ssh, l'authentification par saisie du mot de passe du serveur, par l'authentification par clé privée / clé publique du client. Cette méthode a pour avantage

Référence https://linuxize.com/post/how-to-set-up-ssh-keys-on-debian-10/

Sommaire

1 - Principe

2 - Mise en oeuvre

2.1 - Sur le poste client, créer une paire de clés privée/publique

$ ls .ssh/id*
.ssh/id_rsa .ssh/id_rsa.pub

il n'est pas nécessaire d'en générer une nouvelle.

$ ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/home/philippe/.ssh/id_rsa):

Taper Entrée pour accepter le choix par défaut pour l'emplacement et le nom du fichier. Veiller à ne pas utiliser le même nom qu'une paire de clés existante, sinon elle l'écraserait.

Enter passphrase (empty for no passphrase): 
Enter same passphrase again:
Your identification has been saved in /home/philippe/.ssh/id_rsa.
Your public key has been saved in /home/philippe/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:GdTnnwtG3W26btchJeg8S67tSqYHXyfC1xijd9LtLSE philippe@buster
The key's randomart image is:
+---[RSA 2048]----+
| .. |
| . . . |
| . o.. ..|
| o +o...+|
| S +.*.++ |
| . + %E*=o |
| ooB.Boo++|
| +o.o =.+|
| ..o+o o.o |
+----[SHA256]-----+

$ ls -l .ssh |grep id_rsa
-rw------- 1 philippe philippe 1823 nov. 5 13:10 id_rsa
-rw-r--r-- 1 philippe philippe 397 nov. 5 13:10 id_rsa.pub
$ cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1...........vDb+3fcERLE7 philippe@buster

Noter la zone de commentaire : philippe@buster à la de la clé publique. Le commentaire par défaut est $USER@$HOSTNAME. Il aurait pu défini dans la commande de génération de la paire de clé avec l'option -C (voir plus loin)

2.2 Communiquer la clé publique du client au serveur

$ ssh-copy-id -i ~/.ssh/id_rsa.pub pi@rpi1
/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
pi@rpi1's password:

Number of key(s) added: 1

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

Lorsque la clé possède le nom et l'emplacement pas défaut (~/.ssh/id_rsa.pub), son identité peut-être omise et la commande se resume à

$ ssh-copy-id pi@rpi1
$ cat .ssh/id_rsa.pub
ssh-rsa AAAAB3Nz.......4W8vDb+3fcERLE7 philippe@buster

2.3 - Connexion avec clé privée non chiffrée

$ ssh -l pi rpi1
...
pi@raspberrypi:~ $

2.4 - Connexion avec clé privée protégée par phrase de passe

Si la clé est protégée par phrase de passe, elle sera demandée à la connexion

$ ssh -l pi rpi1
...
Enter passphrase for key '/home/philippe/.ssh/id_rsa':
.....
pi@raspberrypi:~ $

3 - Gestion des clés

3.1 - Coté client

$ ssh-keygen -t rsa -b 2048 -C Exemple -f /home/philippe/.ssh/exemple
Generating public/private rsa key pair.
....
Your identification has been saved in /home/philippe/.ssh/exemple.
Your public key has been saved in /home/philippe/.ssh/exemple.pub.
The key fingerprint is:
SHA256:Gb4ROH0G+oBnpXrp1VinPf2NdWD9A5BgnV3wvO0T3Jo Exemple
$ ssh-keygen -p -f .ssh/exemple
Key has comment 'Exemple'
Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved with the new passphrase.
$ ssh-keygen -F rpi1
# Host rpi1 found: line 1
|1|TOD3rthuW6okR2pta5q5k1uvflI=|NRfwgzo......QLNZHU=
$ ssh-keygen -R rpi1

3.2 - Coté serveur

$ cat .ssh/authorized_keys 
ssh-rsa AAAAB.......Db+3fcERLE7 philippe@buster
$ ls /etc/ssh
moduli ssh_host_dsa_key ssh_host_ecdsa_key.pub ssh_host_rsa_key
ssh_config ssh_host_dsa_key.pub ssh_host_ed25519_key ssh_host_rsa_key.pub
sshd_config ssh_host_ecdsa_key ssh_host_ed25519_key.pub
$ ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub

Note : l'empreinte de la clé calculée à partir de la clé publique et de la clé privée sont identiques, l'une ou l'autre peuvent être utilisées dans la commande

$ sudo rm /etc/ssh/ssh_host_*
$ sudo dpkg-reconfigure openssh-server

Annexe - Gestion des clés en mode graphique

Gnome-keyring et Seahorse permettent de générer et gérer des clés ssh de façon graphique rendant inutiles les opérations en ligne de commande décrites ci-dessus. Après avoir installé Seahorse

$ cd ~/.ssh/
$ /usr/lib/x86_64-linux-gnu/seahorse/seahorse-ssh-askpass id_rsa