TUTOS.EU

S'authentifier avec une clé publique avec putty

Commenter utiliser une clé publique pour ouvrir une session avec putty


Le but ici est de ne plus à avoir à saisir de mot de passe pour s'authentifier sur un serveur SSH.

Non seulement c'est plus pratique, et en plus c'est plus sécure.

 

Pour cela j'ai regardé 2 ou 3 sites pour faire marcher l'authentification sans mot de passe.

Il y a eu ssh.com mais ce n'était pas forcément une bonne idée car le site officiel de ssh donné par wikipedia est openssh.com. Ce dernier n'est pas attrayant.

doc.ubuntu-fr.org est comme souvent un très bon choix mais entre deux je suis tombé sur pixiscreen.fr qui est moins complet mais qui a fait le job.

 

Bref, pour s'authentifier avec une paire de clé, cad une publique et l'autre privée, il faut déjà les générer. Pour cela on va utiliser puttygen.

Il est livré avec putty quand on l'installe, sinon on peut le récupérer sur

https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

En bas de l'interface, on peut choisir la taille de la clé.
ssh.com indique que celle par défaut, caf RSA sur 2048 bits devrait être suffisant pour la plupart des usages.

Cliquez sur Generate

Ce n'est pas obligatoire mais vous pouvez entrer par 2 fois une Passphrase, cad un mot de passe, qu'il vous faut noter ou retenir. Ainsi celui qui arrive à copier votre clé priver ne pourra pas s'en servir sans.

Entrer un éventuel commentaire.

Sauvegarder la clé publique et privée


De là, vous pouvez basiquement côté client, cad côté putty, au niveau de votre session, indiquer sous
Connection>SSH>Auth le chemin vers votre clé privée

Vous pouvez aussi utiliser pageant qui va gérer vos clés privées pour vous.

Pour cela, lancer pageant

Aller sur View keys

Ajouter une clé

Ajouter votre clé privée

Entrer sa passphrase


Du côté de votre serveur Linux, cela va se passer au niveau du homefolder du login qui va se présenter.
Dans le répertoire du home folder il faut qu'un répertoire .ssh existe et qu'il contienne un fichier nommé authorized_keys

Donc il faut se logger avec le compte pour lequel on veut s'authentifier avec un certificat et créer le répertoire .ssh avec cette commande

mkdir ~/.ssh
Lien vers le fichier : cliquez ici

Pour être certain, déplacez vous dans le répertoire du homefolder

cd ~
Lien vers le fichier : cliquez ici

Modifier les droits du répertoire .ssh avec la commande

chmod 700 .ssh
Lien vers le fichier : cliquez ici

Entrer dans le répertoire ssh

cd .ssh
Lien vers le fichier : cliquez ici

Il faut ajouter votre clé publique dans un fichier nommé authorized_keys qui n'existe pas forcément.
Pour cela on va utiliser la commande echo à laquelle on demandera d'ajouter la clé publique dans le fichier authorized_keys.

La commande écho délimite le début et la fin de la clé par " et "
La clé publique doit être en une seule ligne, sans retour à la ligne etc

Pour copier la clé publique, dans puttygen, faire un clic droit sur cette dernière et choisir Tout sélectionner

Refaire un clic droit et copier toute la clé publique

Cote serveur coller la clé publique entre les 2 " "

La commande à adapter avec votre clé publique est donc

echo "votreclépublique" >> authorized_keys
Lien vers le fichier : cliquez ici

Vous devez donc vous retrouver avec une commande super longue à exécuter

Le fichier authorized_keys doit maintenant exister et contenir votre clé publique

Modifiez les droits de authorized_keys avec la commande

chmod 600 authorized_keys
Lien vers le fichier : cliquez ici

Voila, vous devez maintenant pouvoir vous connecter avec votre paire de clés, sans à avoir à saisir un mot de passe !


Les logs d'authentification se voient avec

sudo tail -f /var/log/auth.log
Lien vers le fichier : cliquez ici

Quand vous vous connectez avec le certificat, ce message doit passer dans les logs :

Accepted publickey for votrelogin from votreip port leport


Alors je n'ai pas testé mais on peut aller plus loin dans le concept et carrément interdire de se logger avec un login/mot de passe. Seul l'authentification par certificat passera.
En fait quand on regarde le nombre de tentatives de bots qui cherchent à ouvrir une session ssh, ça fait peur.

On trouve des sites comme https://www.cyberciti.biz/faq/how-to-disable-ssh-password-login-on-linux/
qui expliquent la manip.

En gros il faut modifier la config du serveur ssh avec

sudo nano /etc/ssh/sshd_config
Lien vers le fichier : cliquez ici

Et passer ces réglages à no

  • ChallengeResponseAuthentication no

  • PasswordAuthentication no

  • UsePAM no

Redémarrer le serveur ssh avec

sudo systemctl reload sshd
Lien vers le fichier : cliquez ici