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
Pour cela, sur le PC client , un couple clé privée - clé publique (.ssh/id_rsa et .ssh/id_rsa.pub) est créé, puis au cours de la première connexion avec authentification par mot de passe, comme indiquée dans "Connexion sécurisée - SSH",
la clé publique ecdsa du serveur est stockée stockage chez le client dans .ssh/known_hosts
la clé publique du client est communiquée au serveur de , celle-ci est stockée par le serveur en .ssh/authorized_keys
SI l'on dispose déjà d'une paire de clés sur le poste client (avec les noms par défaut), ce que l'on peut vérifier avec
$ ls .ssh/id*
.ssh/id_rsa .ssh/id_rsa.pub
il n'est pas nécessaire d'en générer une nouvelle.
Sinon, générer une paire de clés
$ 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
Afficher la clé publique
$ 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)
Communiquer la clé publique au PC distant et entrer le mot de passe utilisateur distant, on suppose que le serveur distant à l'adresse pi1
$ 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
Désormais la connexion s'effectuera directement, sans demande de mot de passe
$ ssh -l pi rpi1
...
pi@raspberrypi:~ $
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:~ $
Génération d'une paire de clé avec nom (exemple) et commentaire (Exemple) spécifiques
$ 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
Changer la phrase de passe d'une clé
$ 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.
Rechercher la clé d'un hôte dans le fichier known_hosts
$ ssh-keygen -F rpi1
# Host rpi1 found: line 1
|1|TOD3rthuW6okR2pta5q5k1uvflI=|NRfwgzo......QLNZHU=
Supprimer toutes les clé du serveur rpi1 dans la liste known_hosts
$ ssh-keygen -R rpi1
Liste des clés autorisées
$ cat .ssh/authorized_keys
ssh-rsa AAAAB.......Db+3fcERLE7 philippe@buster
Liste des clés du serveur ssh
$ 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
Afficher l'empreinte d'une clé système, ssh_host, par exemple, la clé ecdsa
$ 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
Recréer des clés système : les supprimer et les régénérer
$ sudo rm /etc/ssh/ssh_host_*
$ sudo dpkg-reconfigure openssh-server
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
Dans le menu Session et démarrage de XFCE4 :
Dans l'onglet Démarrage automatique, cocher les lignes Agent de clés SSH (Trousseau de clés GNOME : agent SSH) et Composants secrets de gnome-keyrings
Dans l'onglet Avancé / Compatiblité, cocher Charger les services GNOME au démarrage
Redémarrer la session XFCE4
Générer les clés OpenSSH. La transmission de la clé publique au serveur s'effectue automatiquement.
En cas de besoin, exécuter la commande suivante
$ cd ~/.ssh/
$ /usr/lib/x86_64-linux-gnu/seahorse/seahorse-ssh-askpass id_rsa
Ouvrir la session avec la commande usuelle.