====== Authentification par Clé publique======
L'authentification **SSH** par **clé** permet de choisir les clients **autorisés** à se connecter sur le serveur SSH. Mais l’intérêt est aussi de pouvoir tous les **désactiver** en retirant la clé de **confiance** sur le serveur.
{{ :wiki:ssh:key_auth_ssh4.png?700 |Schéma résumé}}
===== Sources importantes =====
* [[https://www.it-connect.fr/chapitres/authentification-ssh-par-cles/|Article IT-Connect : Authentification SSH par clés ]]
* [[https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-server-fr#comment-integrer-votre-cle-publique-lors-de-la-creation-de-votre-serveur|Article DigitalOcean : Comment configurer une authentification par clé SSH sur un serveur Linux]]
===== Générer la clé publique =====
La clé doit etre générer par le client et par la suite transmit au serveur ssh.
installer le paquet OpenSSH si il ne l'est pas.
sudo apt install openssh-client
Puis générer la clé avec **ssh-keygen**.
La clé sera générer dans le dossier **/home/utilisateur/.ssh/**
ssh-keygen
Si aucune option n'est spécifiée, une clé RSA de 2048 bits sera créée.
L'option **-b** permet de spécifier la taille.
ssh-keygen -b 4096
Afin de protéger la clé en cas de compromission, il faut définir une passphrase.
Son Fingerprint sera également afficher.
{{ :wiki:ssh:key_auth_ssh1.png?600 |}}
===== Configurer la clé sur le serveur =====
Avec **OpenSSH** on peut ajouter la clé avec **ssh-copy-id**.
ssh-copy-id utilisateur@serveur
**-p** Pour spécifier le port.
ssh-copy-id -p 500 utilisateur@serveur
{{ :wiki:ssh:key_auth_ssh2.png?700 |}}
Il faudra spécifier le mot de passe une dernière fois.
La connexion avec ce client se fera désormais avec la passphrase.
{{ :wiki:ssh:key_auth_ssh3.png?700 |}}
La clé est désormais stocker sur le serveur dans le dossier .**ssh** de l'utilisateur connecté.
**~/.ssh** (vérifier la permission du dossier en **700**)
Et la liste des clés autoriser dans lee fichier **authorized_keys**.
**~/.ssh/authorized_keys** (vérifier la permission du fichier en **600**)
===== Désactiver la connexion par mot de passe =====
Avant de désactiver la connexion par mot de passe, s'assurer qu'au moins un client peut se connecter par clé.
Éditer le ficher **/etc/ssh/sshd_config**.
sudo vim /etc/ssh/sshd_config
Éditer ces 2 lignes :
PasswordAuthentication no
PubkeyAuthentication yes
Puis relancer le service **sshd**.
sudo systemctl restart sshd
Désormais seul les clients possédant la clé peuvent se connecter, les autres auront le message (Permission denied)
===== Debugger la connexion =====
Activez le mode verbose sur le client pour déboguer :
ssh -vv user@server