Avec SSH, l’authentification peut se faire sans l’utilisation de mot de passe en utilisant la cryptographie asymétrique. Celle-ci se constitue d’une paire de clés contenant une clé publique et une clé privée. La clé publique est distribuée sur les systèmes auxquels on souhaite se connecter. La clé privée, protégeable par une pass-phrase (en résumé un mot de passe) ou non, est placée sur la machine que l’on souhaite utiliser pour se connecter.

Source : Wikipédia

La mise en place d’une connexion par clés est très simple et identique pour la plus part des distributions. Ce tutoriel sera donc très rapide (en manipulation) et a été réalisé sous Debian 7 et 8.


Configuration de l’authentification par clés

Le serveur comme le client doit posséder le service ssh. Si ce vous ne l’avez pas encore installé, exécutez la commande suivante pour le faire :

apt-get install ssh

Autoriser la connexion par clés

Cette partie est à appliquer sur le serveur auquel vous voulez connecter.

En fonction de la distribution, la connexion par clés n’est pas activité.

Éditez le fichier  sshd_config :

nano /etc/ssh/sshd_config

Pour rappel, le fichier sshd_config est le fichier de configuration du service ssh ;

Repérez et décommettez la ligne suivante :

#AuthorizedKeysFile     %h/.ssh/authorized_keys

L’option AuthorizedKeysFile permet de spécifier le fichier contenant les clés publiques à utiliser pour l’authentification de l’utilisateur. Par défaut c’est dans un fichier nommé authorized_keys, stocké dans un dossier caché .ssh du home de l’utilisateur à qui on a envoyé la clé, qui contiendra la clé publique ;

Enregistrez les modifications ;

Redémarrez le service ssh :

service ssh restart

Générer une paire de clés

Le reste du tutoriel est à appliquer sur le client avec lequel vous voulez vous connecter.

Éclaircissons un point avant de continuer. Il ne suffit pas que le client possède la clé privée et le serveur clé publique pour que la connexion soit fonctionnelle, quelque soit l’utilisateur utilisé.

Tout d’abord, du côté du client. Seul l’utilisateur possédant dans son dossier personnel (dans un dossier caché nommé .ssh) la clé privé pourra être utilisée pour la connexion par clés. Le plus simple étant donc de générer la paire de clés avec l’utilisateur (administrateur ou non) que vous souhaitez utiliser.

Générez une paire de clés :

ssh-keygen

Il vous est demandé de renseigner un chemin où créer le fichier id_rsa qui contiendra la clé privée : par défaut le chemin est ~/.ssh/id_rsa et je vous conseil de le laisser tel quel ;

Il vous est ensuite proposé de renseigner une pass-phrase en complément de la clé privée pour la connexion par clés. Si vous voulez utiliser la connexion par clés de manière automatique entre plusieurs systèmes, ne renseignez par de pass-phrase ;

Pour résumer, la commande ssh-keygen a créé un fichier id_rsa qui contient la clé privée et un fichier id_rsa.pub qui contient la clé publique que nous enverrons au serveur auquel nous voulons nous connecter. Ces fichiers sont créés dans un dossier caché nommé .ssh et qui a été créé dans le home de l’utilisateur utilisé pour la génération de ces clés : ~/.ssh/.

Envoyer la clé publique

Placez vous dans le dossier où se trouve le fichier id_rsa.pub :

cd ~/.ssh/

Nous allons utilisé la commande ssh-copy-id qui permet (entre autre) d’envoyer à une machine distante une clé publique ;

La commande s’utilise de la manière suivante (parmi d’autres) :

ssh-copy-id -i id_rsa.pub '-p port utilisateur@IPMachineDistante'

port correspond au numéro de port utilisé pour se connecter à la machine distante ;

utilisateur correspond à l’utilisateur qui possédera la clés publique. Ce sera avec cet utilisateur que vous pourrez établir une connexion par clés ;

IPMachineDistance correspond à l’adresse IP de la machine à laquelle nous voulons nous connecter ;

Cette commande créé un dossier .ssh dans le home de utilisateur et créé le fichier authorized_keys qui contient la clé publique envoyée ;

Une fois la clé publique envoyé, vous devriez pouvoir connecter sans devoir renseigner de mot de passe :

ssh -p port utilisateur@IPMachineDistante

Ce tutoriel est terminé. Vous pouvez continuer à sécuriser les communication SSH à votre serveur en mettant en utilisant un tunnel SSH.

Si vous avez des problèmes, où que vous trouvez que certains points sont mal expliqués (ou faux), n’hésitez pas à m’avertir.