feigned

Se connecter en SSH par échange de clés SSH

SSH (Secure Shell) est un protocole de communication sécurisé qui permet de se connecter à un ordinateur distant de façon sécurisée.

Par défaut, la connexion SSH s’effectue avec un mot de passe. Cette méthode d’authentification n’est pas la plus sûre car votre mot de passe peut être dérobé ou deviné par des pirates qui pourraient dès lors accéder à votre serveur et voler vos données personnelles.

Pour plus de sécurité, il est conseillé de se connecter à un ordinateur distant en utilisant l’authentification par échange de clés SSH.

Dans cet article, nous allons voir comment générer une paire de clés SSH sur Windows ou Linux et comment configurer l’authentification par clés SSH afin de vous connecter sans mot de passe à un serveur via SSH.

Préambule : les clés SSH

L’authentification par échange de clés SSH fonctionne en plaçant une clé publique sur l’ordinateur distant et en utilisant une clé privée depuis son ordinateur.

Ces deux clés (publique et privée) sont liées l’une à l’autre. C’est seulement en présentant la clé privée à la clé publique qu’il est possible se connecter.

Chaque clé se présente sous la forme d’une longue chaine de caractères enregistrée dans un fichier.

Pour plus de sécurité, vous pouvez également protéger la clé privée avec une phrase secrète. Autrement dit, pour pouvoir utiliser la clé privée, il faudra saisir un mot de passe, ce qui renforce encore davantage la sécurité.

Les clés SSH peuvent être créées avec différents algorithmes de chiffrement :

  • DSA : dangereux, il n’est plus pris en charge depuis OpenSSH 7.0. À éviter.
  • RSA : acceptable si la longueur de la clé est de 3072 ou 4096 bits. Une longueur de 1024 bits est considérée comme non sûre.
  • Ed25519 : le plus sûr, c’est l’algorithme à privilégier aujourd’hui.

Pour vous aider à y voir plus clair, voici les différents fichiers qui interviennent pour établir une connexion SSH en utilisant une authentification par échange de clés :

  • Sur votre ordinateur :
    • ~/.ssh/id_xxx : votre clé privée
    • ~/.ssh/id_xxx.pub : votre clé publique
  • Sur le serveur :
    • ~/.ssh/authorized_keys : liste des clés publiques autorisées pour se connecter à  l’utilisateur (c’est ici que vous devez placer votre clé publique)

Se connecter en SSH par échange de clés SSH

Étape 1 : générer des clés SSH

Pour commencer, nous devons générer une paire de clés SSH :

  • Selon votre système d’exploitation :
    • Windows 10 :
      • Vérifiez que Client OpenSSH est bien installé dans les Paramètres > Applications et fonctionnalités > Fonctionnalités facultatives.
      • Ouvrez PowerShell.
    • Windows 8 ou 7 :
    • Linux :
      • Ouvrez le Terminal.
  • Générez une paire de clés SSH avec la commande ssh-keygen en spécifiant l’algorithme de chiffrement désiré. Par exemple, avec Ed25519 :
    ssh-keygen -t ed25519

    avec RSA 4096 :

    ssh-keygen -t rsa -b 4096
  • Laissez l’emplacement par défaut en appuyant sur Entrée.
    Generating public/private ed25519 key pair.
    Enter file in which to save the key (C:\Users\Pierre\.ssh\id_ed25519):
  • Entrez une phrase secrète pour protéger votre clé privée :
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
  • Voilà, votre paire de clés SSH a bien été générée !
    Your identification has been saved in C:\Users\Pierre\.ssh\id_ed25519.
    Your public key has been saved in C:\Users\Pierre\.ssh\id_ed25519.pub.
    The key fingerprint is:
    SHA256:4Yjb63lZzyRw+ADKaZ6nwZDA7jBrtorVR4mkgXRGWN0 [email protected]
    The key's randomart image is:
    +--[ED25519 256]--+
    |..+=. .          |
    |o+o  ..E         |
    |o..o.o ...       |
    |o.o+=o ++..      |
    |oo.=o.+ S=       |
    |.+ .=+.   + .    |
    |o o o+o  o =     |
    |.o  .. oo   o    |
    |+    .+.         |
    +----[SHA256]-----

  • Vos clés SSH se trouvent dans le répertoire ~/.ssh/.
    ls ~/.ssh
    
    Répertoire : C:\Users\Pierre\.ssh
    
    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    -a----        26/11/2020     12:02            464 id_ed25519
    -a----        26/11/2020     12:02            105 id_ed25519.pub
    -a----        25/11/2020     15:03           2214 known_hosts
Étape 1 terminée : votre paire de clés SSH (publique et privée) a bien été créée. Prochaine étape : copier la clé publique sur le serveur distant. 👍

Étape 2 : copier la clé publique sur le serveur distant

Pour établir la connexion SSH par clés SSH, il faut que notre clé publique soit présente dans le fichier ~/.ssh/authorized_keys d’un utilisateur sur le serveur distant.

Pour copier une clé publique sur le compte d’un utilisateur distant, suivez ces instructions :

  • Windows 10 :
    1. Ouvrez PowerShell.
    2. Saisissez la commande suivante :
      cat ~/.ssh/id_ed25519.pub | ssh <username>@<hostname> "cat >> ~/.ssh/authorized_keys"

      Remplacez username par le nom d’utilisateur et hostname par l’adresse IP ou le nom d’hôte du serveur.

    3. Entrez le mot de passe de l’utilisateur.
    4. Voilà, votre clé publique a bien été copiée dans le fichier ~/.ssh/authorized_keys de l’utilisateur sur le serveur distant !
  • Windows 8 ou 7 :
    1. Ouvrez Git Bash.
    2. Saisissez la commande suivante :
      ssh-copy-id <username>@<hostname>

      Remplacez username par le nom d’utilisateur et hostname par l’adresse IP ou le nom d’hôte du serveur.

    3. Entrez le mot de passe de l’utilisateur.
    4. Voilà, votre clé publique a bien été copiée dans le fichier ~/.ssh/authorized_keys de l’utilisateur sur le serveur distant !
  • Linux :
    1. Ouvrez le Terminal.
    2. Saisissez la commande suivante :
      ssh-copy-id <username>@<hostname>

      Remplacez username par le nom d’utilisateur et hostname par l’adresse IP ou le nom d’hôte du serveur.

    3. Entrez le mot de passe de l’utilisateur.
    4. Voilà, votre clé publique a bien été copiée dans le fichier ~/.ssh/authorized_keys de l’utilisateur sur le serveur distant !
Étape 2 terminée : votre clé publique a bien été copiée sur le serveur distant. Vous pouvez maintenant vous connecter en SSH en utilisant l’authentification par clés SSH. 👍

Étape 3 : se connecter en SSH par clés SSH

  1. Selon votre système d’exploitation :
    • Windows 10 : ouvrez PowerShell
    • Windows 8 ou 7 : ouvrez Git Bash
    • Linux : ouvrez le Terminal
  2. Connectez-vous au serveur distant en utilisant la commande suivante :
    ssh <username>@<hostname>

    Remplacez username par le nom d’utilisateur et hostname par l’adresse IP ou le nom d’hôte du serveur.

  3. Entrez la phrase de passe de votre clé privée (si vous en avez défini une).
  4. Voilà, vous êtes maintenant connecté à votre serveur !
Félicitations ! Vous avez réussi à vous connecter en SSH à un serveur en utilisant une authentification par clés SSH. 👍

Forcer l’authentification par mot de passe

Une fois l’authentification par échange de clés SSH configurée, il s’agit de la méthode d’authentification par défaut pour vous connecter à votre serveur.

Si vous souhaitez forcer l’authentification par mot de passe, entrez la commande suivante :

ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no <username>@<hostname>

Désactiver l’authentification par mot de passe

Pour désactiver l’authentification par mot de passe et n’utiliser que l’authentification par échange de clés SSH, suivez ces instructions :

  1. Connectez-vous au serveur.
    ssh <username>@<hostname>
  2. Éditez le fichier /etc/ssh/sshd_config.
  3. Remplacez la valeur de PasswordAuthentication par no.
  4. Redémarrez le service sshd :
    systemctl restart sshd

Liens utiles

 

204 utilisateurs actifs