Authentification ssh par clé privée

08 Août 2016


Suite à un précédent article concernant la sécurisation d'un serveur linux, j'étais resté vague sur la mise en place de l'authentification ssh par clé privée.

L'authentification par clé privée augmente la sécurité d'un serveur au niveau du processus de connexion. Au lieu d'un simple couple identifiant / mot de passe, il faut désormais être en possession de deux informations secrètes à la fois :

  • une clé privée (un fichier que vous conservez précieusement et surtout secrètement)
  • un mot de passe (pour décrypter la clé, et ainsi pouvoir l'utiliser)

 

Génération des clés

Pour mettre en place ce type d'authentification, il va falloir générer 2 clés : La clé privée et la clé publique.

La clé publique n'a pas besoin d'être secrète. C'est une clé qui est capable de reconnaître sa clé privée (cryptographie asymétrique). Cette clé sera donc placée sur le serveur afin qu'elle puisse vérifier notre clé privée lorsque nous voudrons nous connecter.

Sous linux

Générons notre paire de clé :

ssh-keygen -t rsa -b 4096 -C votre@email.com

Ici on génère une clé RSA de 4096 bits avec en commentaire votre adresse mail (juste afin de s'y retrouver si vous avez plusieurs clés à générer)

Par défaut ssh-keygen génère une clé RSA de 2048 bits avec en commentaire : USER@host.

A vous de voir si vous préférez utiliser un algorithme RSA ou DSA. Il n'y a pas de plus ou moins costaud mais DSA est plus récent.

Pour la taille de la clé, il est recommandé de faire au moins du 2048 bits pour le RSA. En DSA, la clé fait obligatoirement 1024 bits.

Vos deux clés sont générées par défaut dans : ~/.ssh/

Vous y retrouvez vos deux clés :

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

 

Sous windows

Utilisez la suite putty et générez vos clés avec PuTTYgen.

 

Mise en place de la clé publique sur le serveur

Il faut maintenant envoyer la clé publique sur le serveur et la placer dans le fichier ~/.ssh/authorized_keys. Ce fichier est utilisé lors de l'authentification pour déterminer si la clé privée de l'utilisateur est conforme à la clé publique inscrite dans le fichier.

 

Envoi de la clé si le serveur autorise l'authentification par mot de passe (sous client linux)

Nous allons utiliser ssh-copy-id qui permet d'envoyer notre clé publique automatiqument dans le fichier ~/.ssh/authorized_keys en remettant les bons droits d'écriture sur le fichier.

ssh-copy-id -i ~/.ssh/id_rsa.pub <username>@<ipaddress>

Si le port SSH n'est pas sur le port standard (22) :

ssh-copy-id -i ~/.ssh/id_rsa.pub -p <num_port> "<username>@<ipaddress>"

 

Autre méthode

Copiez le contenu de votre clé publique dans ~/.ssh/authorized_keys sur le serveur.

 

Configuration sur le serveur

Côté serveur, nous allons maintenant indiquer à ssh que nous souhaitons permettre la connexion par clés. Modifier la configuration du fichier /etc/ssh/sshd_config :

RSAAuthentication yes
PubkeyAuthentication yes
StrictModes yes

Avec StrictMode = yes, donnez les bons droits à votre homedir sinon l'authentification risque d'échouer :

chmod go-w ~/
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Recharger le serveur ssh :

service sshd reload

 

Connexion avec votre clé privée

Sous linux

Modifiez ou créez le fichier ~/.ssh/config et adaptez le avec l'exemple ci-dessous :

Host serveur1
  HostName serveur1.domain.tld
  User remi
  Port 22
  IdentityFile /home/remi/.ssh/id_rsa

Host serveur2
  HostName 192.168.1.120
  User remi
  Port 22
  IdentityFile /home/remi/autre_cle/private_key

HostName : Adresse ip ou nom de domaine du serveur

User : Utilisateur à utiliser en login

Port : Numéro du port à utiliser

IdentifyFile : Chemin vers votre clé privée à utiliser

 

Maintenant connectez-vous au serveur :

ssh serveur1

Indiquez votre passphrase.

Si tout va bien vous êtes maintenant connecté au serveur.

 

Vous pouvez ajouter votre clé privée dans votre agent ssh pour éviter de devoir taper votre passphrase à chaque fois (il faudra quand même le refaire à chaque ouverture de session) :

ssh-add ~/.ssh/id_rsa

Indiquez votre passphrase pour dévérouiller la clé.

Maintenant connectez-vous au serveur :

ssh serveur1

La passphrase ne vous est pas demandée et vous êtes connecté.

 

Il est possible aussi de se connecter directement sans passer par le fichier de config :

ssh <username>@<ipaddress>

 

Sous windows

Utilisez la suite putty et ajoutez votre clé publique sur Pagent.

 

Désactiver l'authentification par mot de passe

Modifiez la configuration du fichier /etc/ssh/sshd_config :

ChallengeResponseAuthentication no
PasswordAuthentication no

Puis redémarrez le serveur ssh :

service sshd reload

 

Terminé ! Votre serveur est désormais mieux protégé !

Commentaires

Aucun commentaire