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 :
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.
Pour envoyer un fichier sur le serveur, le plus simple reste d’utiliser scp. Voici un exemple :
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 :
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.
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 :
Pour supprimer toutes les clés de ssh-agent :
Pour supprimer une clé spécifique sur ssh-agent :
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 :
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 :
Si vous avez d’autres astuces sur SSH, n’hésitez pas à les partager en postant un commentaire en dessous 😉