Se connecter en ssh avec une clé publique

cle

Quoi de plus simple que d’utiliser ssh pour prendre la main sur un serveur ou pour lancer des commandes précises à distance ? Savez-vous qu’il est possible d’utiliser une connexion ssh sans avoir à saisir de mot de passe ? En suivant ce petit tutoriel vous pourrez créer un duo clé publique / clé privée et utiliser votre clé publique pour vous connecter à un serveur distant sans avoir à saisir votre mot de passe à chaque fois.

cle

Quelques définitions avant de commencer

SSH est un protocole de communication qui impose le cryptage de tous les paquets échangé entre les points (voir la définition sur Wikipédia). L’utilisation de ce protocole implique l’utilisation d’un serveur (par exemple sshd) et d’un client (ssh), ces deux composants sont souvent regroupés dans un package, comme OpenSSH.

Pour notre exemple nous utiliserons deux machines linux (j’ai fait le test avec des virtual box sous ubuntu pour rédiger cet article) :

  • l’une appelée serveur distant sera accessible à l’adresse 192.168.10.10 ; c’est sur cette machine que nous allons nous connecter avec notre système de clé publique / clé privée
  • l’autre, appelée poste local se trouve derrière l’IP 192.168.0.1 ; c’est à partir du poste local que nous nous connecterons au serveur distant.

Si vos machines n’ont pas ssh installé, commencez par installer le package OpenSHH adapté sur chaque poste :

sudo apt-get update
sudo apt-get install openssh-server
Installation de OpenSSH server
sudo apt-get update
sudo apt-get install openssh-client
Installation du client OpenSSH

separateur

Mise en place de l’authentification ssh par clé publique

1. Sur le poste local : création des clés ssh

Commençons par créer nos deux clés (publique et privée) sur le poste local : cet ordinateur va générer deux clés aléatoires qui lui serviront à s’identifier sur les différents services auxquels il sera ajouté.

Attention à ne pas saisir de mot de passe si vous souhaitez utiliser votre connexion ssh pour des services automatisés (comme la synchronisation de fichiers avec unison par exemple).

ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/moi/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/moi/.ssh/id_dsa.
Your public key has been saved in /home/moi/.ssh/id_dsa.pub.
The key fingerprint is:
ab:f7:45:54:4f:b3:c3:a9:4d:93:e0:41:8c:ea:3d:b8 moi@postelocal
The key's randomart image is:
+--[ DSA 1024]----+
|            ++...|
|           ..o+o=|
|          . .. O.|
|         . .  + o|
|        S o .. . |
|         + +     |
|        . . o    |
|       ..E .     |
|      .. ..      |
+-----------------+

Vous retrouverez vos clés dans le dossier .ssh de votre répertoire utilisateur. Pour les visualiser rien de plus simple :

more $HOME/.ssh/id_dsa
Visualiser sa clé privée SSH
more $HOME/.ssh/id_dsa.pub
Visualiser sa clé publique SSH

2. Envoi de la clé publique vers le serveur distant

A ce niveau, nous allons transférer la clé publique vers un compte bien spécifique du serveur distant. Ici j’ai choisi root parce que ça parle à tout le monde mais ça n’est pas très sûr en raison de tous les privilèges que possède ce compte. Il suffit d’une ligne de commande pour demander la copie de la clé publique, une saisie du mot de passe du compte sur le serveur distant et le tour est joué : un message nous invite à vérifier que tout s’est bien passé et que notre fichier de clés autorisées ne contient que celle(s) que vous souhaitez.

ssh-copy-id -i $HOME/.ssh/id_dsa.pub root@192.168.10.10
root@192.168.10.10's password:
Now try logging into the machine, with "ssh 'root@192.168.10.10'", and check in                             :

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

3. Vérification de la clé publique sur le serveur distant

Comme cela a été demandé à l’étape précédente nous allons nous connecter sur le serveur distant avec le compte utilisateur auquel nous avons envoyé notre clé publique (pour mon exemple il s’agit de root) et vérifier le contenu du fichier .ssh/autorized_keys.

more $HOME/.ssh/authorized_keys

Ce fichier doit contenir la clé publique que vous avez envoyée (celle que vous avez visualisé à la fin de l’étape 1) et éventuellement celles que vous auriez pu envoyer à partir d’autres postes.

4. Connexion à partir du poste local

Il ne reste plus qu’à vous connecter au serveur distant à partir de votre poste local, si tout s’est bien passé la connexion doit se faire sans vous demander de mot de passe.

ssh root@192.168.10.10

separateur

Ce tutoriel est terminé, il vous aura fallu environ 15 minutes pour le mettre en oeuvre, et vous allez gagner au moins 50 heures par jour grâce à cette astuce… Pour rester sérieux jusqu’au bout, en plus de vous simplifier la vie si vous vous connectez souvent à de multiples serveurs qui ont tous des mots de passe différents, utiliser ce mode d’authentification par clé publique va vous permettre d’utiliser tous les automatismes que vous souhaitez sans avoir à intervenir du tout. Peut-être que certains d’entre vous on mis en place ce type de traitement automatisé utilisant ssh ? N’hésitez pas à en parler en commentaires !

 



Source : Crédit clipart

3 réponses

  1. dady dit :

    Les clés sont visibles dans le dossier .ssh et non .rsa

  2. […] Quoi de plus simple que d’utiliser ssh pour prendre la main sur un serveur ou pour lancer des commandes précises à distance ? Savez-vous qu’il est possible d’utiliser une connexion ssh sans avoir à saisir de mot de passe ?  […]

  3. Renaud M.G. dit :

    Je corrige la coquille merci

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *