Configurer SSH pour s’authentifier par clé privée

Si vous utilisez SSH pour vous connecter à votre serveur en distant, en terme de sécurité il est recommandé de s’authentifier par clé privée plutôt que par login / mot de passe. Nous allons voir dans cet article comment mettre en place ce mode d’authentification sur un serveur Linux.

Principe et avantages

L’authentification par clé privée augmente la sécurité car elle se base sur deux informations secrètes et une publique (au lieu d’un simple couple identifiant / mot de passe) :

  • Une clé privée : matérialisée par un fichier, à garder à l’abri.
  • Une clé publique : déposée sur le serveur distant
  • Un mot de passe : « passphrase », permet de décrypter la clé privée

A l’issue de la procédure décrite ci-après, nous verrons comment utiliser un agent ssh qui vous permettra de ne pas avoir à saisir la passphrase à chaque connexion.

Génération d’une clé

Ouvrez un terminal sur votre poste puis exécutez la commande suivante pour générer une paire de clé (publique / privée) :
ssh-keygen -t rsa -b 4096

Vous pouvez utiliser le chemin par défaut pour stocker la clé en appuyant sur entrée, puis entrez la passphrase de votre choix.

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/monUtilisateur/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/monUtilisateur/.ssh/id_rsa.
Your public key has been saved in /Users/monUtilisateur/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:1eRT2354qdfea664532189eiou96354

Remarque : si vous êtes sur Windows, il vous faudra utiliser Putty ou un client SSH.

La commande ci-dessus nous a donc permis de générer une clé RSA de 4096 bits (par défaut ssh-keygen génère des clés de 2048 bits, le minimum préconisé en RSA). L’exemple s’est fait en RSA mais vous pouvez si vous le souhaitez utiliser l’algorithme DSA (uniquement en 1024 bits) ; le niveau de sécurité est équivalent mais il est plus récent.

Si tout s’est bien passé, vous devriez retrouver vos deux clés dans votre répertoire utilisateur .ssh/:

  • id_rsa.pub : clé publique
  • id_rsa : clé privée

Si jamais vous souhaitez modifier la passphrase de votre clé privée, rendez-vous dans votre répertoire et exécutez la commande suivante :
ssh-keygen -f id_rsa -p

Copie de la clé publique sur le serveur distant

Vous pouvez copier votre clé publique manuellement sur le serveur distant, ou via la commande ssh-copy-id (si l’authentification par mot de passe est activée).

  • Méthode 1 : ssh-copy-id

    Exécutez la commande suivante :
    ssh-copy-id -i id_rsa.pub utilisateur@ipServeurDistant

    La clé publique sera automatiquement envoyée dans le fichier distant /.ssh/authorize_keys.
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
utilisateur@ipServeurDistant's password: 

Number of key(s) added:        1

Now try logging into the machine, with:   "ssh 'utilisateur@ipServeurDistant'"
and check to make sure that only the key(s) you wanted were added.

Méthode 2 : copie manuelle

Connectez-vous à votre serveur distant, puis copiez-collez le contenu de la clé publique id_rsa.pub dans le fichier /.ssh/authorized_keys .

Vous pouvez ensuite tester l’authentification par clé privée : ssh utilisateur@ipDuServeur.
Le mot de passe ne vous sera pas demandé (mais la passphrase oui).

Ajouter la clé privée dans votre agent SSH

Pour évitez d’avoir à taper à chaque fois votre passphrase au cours d’une session, vous pouvez ajouter votre clé privée dans votre agent SSH. Ce dernier va garder en mémoire votre clé.

Pour ce faire, exécutez la commande suivante puis entrez votre passphrase :
ssh-add id_rsa

Connectez-vous ensuite à votre serveur distant :
ssh utilisateur@ipDuServeur

Votre passphrase ne vous est plus demandée.

Pour aller plus loin dans la sécurisation : désactiver l’authentification SSH par mot de passe

Avant d’opérer les modifications suivantes, assurez-vous que votre authentification par clé privée est bien opérationnelle.

Nous allons maintenant voir comment modifier la configuration ssh du serveur distant afin que seules les connexions par clé privée soient acceptées.

Editez le fichier /etc/ssh/sshd_config et modifiez les lignes suivantes :

# Désactiver l'authentification login - mot de passe
PasswordAuthentication no 
ChallengeResponseAuthentication no

# Activation authentification par clé (par défaut à yes si commenté)
PubkeyAuthentication yes

Exécutez la commande suivante pour que les modifications soient prises en compte :
sudo service sshd reload

Partager sur :