====== Configurer une authentification avec un couple de clés privée/publique SSH ======
==== Présentation ====
Pour administrer un serveur Linux, vous pouvez utiliser le compte **root** ou, ce qui est fortement conseillé, un compte que vous avez créé et à qui vous avez permis une **élévation de privilèges**.
Si vous gérez un autre serveur, il est également fortement conseillé d'utiliser **un mot de passe différent**. Cette solution n'est **pas satisfaisante et peu sécurisée** si vous devez gérer de nombreux serveurs.
Par ailleurs cela est problématique si vous avez des tâches d'administration à **automatiser** car la saisie manuelle du mot de passe sera nécessaire ou bien il faudra indiquer le **mot de passe dans les scripts** ce qui est problématique si vous n'avez pas de solution pour les chiffrer.
Les solutions possibles :
* utiliser un **annuaire LDAP pour centraliser** la gestion des comptes.
* utiliser des **clés SSH publique**.
Vous aller configurer le compte **root** ou le compte linux que vous avez créé afin de permettre d'ouvrir une session en utilisant une **clé publique SSH**.
Vous utiliserez **votre propre clé publique SSH** pour vous connecter.
Vous permettrez à l'enseignant de se connecter en simple utilisateur avec un compte que vous devez créer et appeler ensbtssio avec sa **clé publique SSH**.
Après la création de votre **couple de clés Privée/publique**, communiquez aux enseignants votre **clé publique** dans le dossier partagé Classe.
Votre clé publique sera rajoutée à la page des clés SSH du BTS SIO à la page :
* [[clessh:listeclepublique|Les clés publiques SSH Etudiant/enseignants]]
* En utilisant **mot de passe**, vous utilisez **un seul facteur** d'authentification.
* En utilisant une **clé publique SSH,** vous utilisez également **un seul facteur** d'authentification.
Cependant, vous pouvez utiliser la **même clé publique SSH sur plusieurs serveurs** en ne retenant qu'un seul mot de passe, celui de la passphrase de votre clé privée.
En général on **désactive** ensuite l'authentification par mot de passe sur les serveurs afin de n'autoriser que l'authentification par clé SSH publique.
Pour en savoir plus : https://www.it-connect.fr/chapitres/authentification-ssh-par-cles/
==== Générer une paire de clé SSH depuis un client OpenSSH====
Générer une paire de clés privée/publique depuis un client Windows ou linux.
Il est conseillé de protéger l'utilisation de la clé privée avec une passphrase.
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/centrecallbd/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/centrecallbd/.ssh/id_rsa.
Your public key has been saved in /home/centrecallbd/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:0rjedyVuT2fzEJHgw5I9lfmTsQ6MHSD87Xrr/aXE3r4 centrecallbd@Ch2Lab1
The key's randomart image is:
+---[RSA 2048]----+
| .. .o .o |
| ..= +oo |
| + @ +.+|
| o + B =.|
| o S . + .|
| o .o.o |
| . ..o=.+|
| . . ..+=.*+|
| . .. oo+=EB|
+----[SHA256]-----+
$
Dans le dossier caché **.ssh** (sous Windows Linux ou MacOsX) vous avez votre couple de clés privée (id_rsa) et publique (id_rsa.pub).
$ ls .ssh
id_rsa id_rsa.pub
$
Un autre fichier **know_hosts** sera ensuite créé dans le dossier **.ssh** afin de contenir **les clés publiques des serveurs** sur lesquels vous vous êtes authentifié avec un mot de passe ou une clé SSH publique.
* Pour retrouver l'entrée d'un nom d’hôte connu dans known_hosts:
$ ssh-keygen -H -F
* Pour supprimer une seule entrée de known_hosts:
# ssh-keygen -R
==== Configurer un accès SSH avec une clé SSH depuis un client OpenSSH====
* Copiez ensuite votre clé publique sur le serveur auquel vous souhaitez accéder avec la clé SSH.
$ ssh-copy-id utilisateur@IP_ordinateur_cible
La clé publique est copiée dans le fichier **.ssh/authorized_keys** du serveur distant.
La commande ssh-copy-id n'est pas disponible sous Windows. Vous pouvez alors :
* utiliser la commande **scp** pour copier le fichier id_rsa.pub dans le dossier l'utilisateur ;
* ouvrir une session ssh pour pouvoir ensuite ajouter le contenu du fichier id_rsa.pub dans le fichier authorized_keys :
C:> scp .ssh/id_rsa.pub compteutilisateur@adresseip:/home/compteutilisateur/
C:> ssh compteutilisateur@adresseip
$ cat id_rsa.pub >> .ssh/authorized_keys
Vous devez maintenant pouvoir vous connecter sans mot de passe au serveur distant :
$ ssh utilisateur@IP_ordinateur_cible
Il est fortement conseillé ensuite de désactiver l'authentification par mot de passe en modifiant le fichier de configuration du service ssh sur le serveur distant **/etc/ssh/sshd_config** :
* Décommentez la ligne suivante en mettant sa valeur à **no** :
PasswordAuthentication no
* Modifiez la ligne suivante pour mettre sa valeur à **no** :
ChallengeResponseAuthentication no
* sauvegardez le fichier **/etc/ssh/sshd_config** et relancer le service ssh :
$ sudo systemctl restart ssh
Pour en savoir plus :
* {{https://fr-wiki.ikoula.com/fr/Cl%C3%A9_SSH-_comment_cr%C3%A9er_une_cl%C3%A9_SSH_(Debian_10)|Clé SSH- comment créer une clé SSH (Debian 10)}}
==== Génération des clés avec PuttyGen ====
* L'utilitaire **Puttygen** est disponible à l'adresse [[http://the.earth.li/~sgtatham/putty/latest/x86/puttygen.exe|PuttyGen]]. IL est disponible dans le **dossier partagé de la classe**.
* Lancez PuttyGEn
{{ :si7:puttygen_01.png |}}
* Cliquez sur le bouton **Generate** et bouger la souris sur la **zone blanche**.
{{ :si7:puttygen_02.png |}}
* Mettez **votre nom** comme commentaire de la clé publique.
* Sélectionnez puis Copiez/Coller votre clé publique dans un fichier texte (extention **.pub**) dans votre dossier personnel.
* Cliquez sur le bouton **Save private key** pour enregister votre clé privée (extention **.ppk**) dans votre dossier personnel.
{{ :si7:puttygen_04.png |}}
* Le contenu du fichier de votre clé publique
{{ :si7:puttygen_05.png |}}
{{ :si7:puttygen_06.png |}}
==== Configuration de l'accès SSH ====
* Utilisez **WinSCP** pour vous connecter avec le compte **root** sur votre VM Debian.
* Créez dans le dossier **/root** un dossier **.ssh** et un fichier **/root/.ssh/authorized_keys**
{{ :si7:puttygen_07.png |}}
* Copiez dans ce fichier le contenu de votre **clé publique**.
* Créez dans le dossier du compte **/home/ensbtssio** un dossier **.ssh** et un fichier **/home/ensbtssio/.ssh/authorized_keys**
* Copiez dans ce fichier la **clé publique** de l'enseignant disponible depuis la page [[clessh:listeclepublique|Les clés publiques SSH Etudiant/enseignants]].
==== Accès au serveur en SSH avec Putty ====
* Configurez Putty pour avoir un accès **console** à votre serveur.
* Indiquez l'**adresse IP** de votre serveur et le **port 22 (SSH)**.
{{ :si7:putty_01.png |}}
* précisez le compte **root** pour vous connecter :
{{ :si7:putty_02.png |}}
* précisez votre **clé privée**
{{ :si7:putty_03.png |}}