Comment se connecter en SSH sans mot de passe

illustration clé ssh tuto

Sommaire

Le protocole SSH permet de se connecter sur une machine distante de manière sécurisé grâce à la cryptographie asymétrique. SSH est largement utilisé par les administrateurs systèmes, car il est simple à mettre en place et très puissant.
Néanmoins, par défaut on doit utiliser un mot de passe pour s’authentifier sur un ordinateur distant avec SSH. Ce n’est pas très contraignant si vous avez un seul serveur, mais si vous avez plusieurs machines avec le besoin de faire des scripts pour automatiser certaines tâches, ça devient compliqué pour 2 raisons. La première, c’est que ce n’est pas évident de « scripter » une connexion SSH avec un mot de passe. La deuxième, c’est que ça n’est pas du tout sécurisé puisque le mot de passe est en dur dans le code.
Dans ce tutoriel, nous allons voir comment mettre en place un système de clé publique/clé privée pour se connecter sans mot de passe de manière sécurisé.

Génération des clés

La première étape consiste à générer les clés SSH (une publique, l’autre privée). Connectez-vous sur votre station de travail avec le même utilisateur que vous utilisez habituellement. Lancer un shell et tapez la commande :

ssh-keygen -t rsa
Génération des clés SSH

On vous demandera plusieurs choses.

  • Enter file in which to save the key : on vous demande de choisir le nom de la clé privée. Si c’est la première fois que vous faites ça, vous pouvez laisser le choix par défaut. Dans le cas contraire, vous aurez probablement un message vous indiquant que le fichier id_rsa existe déjà.
  • Enter passphrase (empty for no passphrase) : ce choix dépend de la sécurité de votre station de travail. La passphrase permet de chiffrer la clé privée pour éviter de vous la faire voler. Si votre station de travail est sûr, appuyez 2 fois sur entrer pour ne pas mettre de passphrase. Dans le cas contraire, ajouter votre mot de passe, sachant qu’il faudra faire une étape supplémentaire après.

Si tout se passe bien, vous devez avoir une « randomart image » (une sorte de petit dessin symbolisant votre clé) qui apparaît. À partir de ce moment, vous devriez avoir 2 nouveaux fichiers :

  • ~/.ssh/id_rsa : la clé privée (qui doit absolument rester secrète)
  • ~/.ssh/id_rsa.pub : la clé publique que vous allez envoyer sur le serveur

Envoi de la clé publique sur le serveur

Pour que l’identification fonctionne, il faut envoyer la clé publique sur le serveur et garder la clé privée sur la station de travail.

Explication du système de clé SSH

Explication du système de clé SSH

Pour envoyer un fichier sur le serveur, le plus simple reste d’utiliser scp. Voici un exemple :

scp ~/.ssh/id_rsa.pub root@ipServeur:/root/.ssh/
Envoi du fichier

En premier argument, le fichier à envoyer (id_rsa.pub), ensuite le nom d’utilisateur et l’ip du serveur (à la manière de SSH) suivi de l’endroit ou placer le fichier. Si vous avez changé le port par défaut de SSH (22), vous pouvez le préciser avec l’option « -P » de scp.

Normalement, on doit renommer la clé publique (id_rsa.pub) en authorized_keys2 sur le serveur. Cependant, si ce fichier existe déjà, vous risquez de le supprimer. Voici une astuce pour ajouter le contenu de votre clé publique à la fin du fichier authoried_keys2 pour éviter ce problème :

ssh root@votreServeur -p votrePortSSH

cd /root/.ssh
cat id_rsa.pub >> authorized_keys2
Ajout de clé publique

Voilà, normalement ça fonctionne ! Vous pouvez le tester en vous connectant par SSH sur votre serveur, aucun mot de passe ne vous sera demandé. Cependant, si vous avez ajouté une passphrase, il y a une étape supplémentaire pour éviter de l’écrire à chaque fois.

Passphrase

Tout ceux qui ont ajouté une passphrase (qui permet de chiffrer le fichier id_rsa), doivent toujours taper un mot de passe pour se connecter. Heureusement, il existe un logiciel qui fait ça pour nous.

ssh-agent $BASH

ssh-agent add
Gestion de la passphrase

Dorénavant, SSH ne vous demandera plus votre passphrase, ssh-agent s’en occupera pour vous.

Bonus

Pour faire une liste des clés gérées par ssh-agent :

ssh-add -l

Pour supprimer toutes les clés de ssh-agent :

ssh-add -D

Pour supprimer une clé spécifique sur ssh-agent :

ssh-add -d cle

Si vous avez changé le port par défaut de SSH sur votre serveur, vous devez le spécifier à chaque fois avec l’option -p du client SSH. Ce n’est pas spécialement pratique, mais vous pouvez modifier le fichier ~/.ssh/config pour changer le port par défaut :

Host serveur1

Hostname nomDeDomaineDeVotreServeur.fr
Port 2222
User utilisateurServeur

Avec ce fichier, vous préciser le nom d’utilisateur qui se connecte sur votre serveur, le nom de domaine de votre serveur et le port SSH utilisé. Ainsi, vous n’aurez plus qu’à taper :

ssh serveur1

Si vous avez d’autres astuces sur SSH, n’hésitez pas à les partager en postant un commentaire en dessous 😉

(Image à la une)