Comment générer et sécuriser les clés SSH pour l'accès à distance

Maîtrisez l'accès à distance sécurisé en apprenant à générer des paires de clés SSH robustes à l'aide de `ssh-keygen`. Ce guide couvre les meilleures pratiques pour sélectionner les types de clés (Ed25519), sécuriser votre clé privée avec une phrase d'identification, déployer efficacement la clé publique à l'aide de `ssh-copy-id`, et utiliser `ssh-agent` pour une authentification transparente. Assurez-vous que votre infrastructure est protégée contre les attaques par force brute en implémentant le contrôle d'accès basé sur les clés.

Comment générer et sécuriser des clés SSH pour l'accès à distance

Secure Shell (SSH) est la méthode standard pour se connecter à des serveurs distants. Si vous utilisez encore des mots de passe pour un accès quotidien, les clés SSH offrent une authentification plus forte et éliminent le risque de deviner le mot de passe de ce compte.

Ce guide vous montre comment générer des clés SSH, protéger la clé privée avec une phrase de passe, installer la clé publique sur un serveur et utiliser ssh-agent pour ne pas avoir à taper la phrase de passe à chaque connexion.

Comprendre les paires de clés SSH

Une paire de clés SSH se compose de deux éléments distincts :

  1. La clé privée : Cette clé ne doit jamais être partagée. Elle reste en sécurité sur votre machine locale et est utilisée pour prouver votre identité au serveur distant.
  2. La clé publique : Cette clé est librement partagée et téléchargée dans le fichier ~/.ssh/authorized_keys sur le(s) serveur(s) distant(s) auquel vous souhaitez accéder. Le serveur utilise cette clé pour vérifier la signature générée par votre clé privée.

Choisir le bon algorithme

Lors de la génération de clés, choisissez un algorithme moderne. Ed25519 est un bon choix par défaut pour les clients OpenSSH actuels car il est rapide, compact et largement pris en charge. RSA fonctionne toujours et est utile lorsque vous devez vous connecter à des systèmes plus anciens qui ne prennent pas en charge Ed25519.

Étape 1 : Générer la paire de clés SSH

L'utilitaire ssh-keygen est l'outil standard pour créer des paires de clés SSH sous Linux, macOS et Windows (via Git Bash ou WSL).

Générer une clé Ed25519 (recommandé)

Pour créer une clé Ed25519 moderne, utilisez la commande suivante. Nous spécifions le type de clé (-t ed25519) et fournissons un commentaire (-C) pour aider à identifier le but ou le propriétaire de la clé :

ssh-keygen -t ed25519 -C "[email protected]_ou_nom_hôte"

Lorsque vous y êtes invité :

  1. Entrez le fichier dans lequel enregistrer la clé : Appuyez sur Entrée pour accepter l'emplacement par défaut (/home/utilisateur/.ssh/id_ed25519).
  2. Entrez la phrase de passe (recommandé) : Définissez une phrase de passe forte pour les clés utilisées en dehors des systèmes de laboratoire jetables. Cela crypte votre clé privée, de sorte qu'un fichier de clé volé ne soit pas immédiatement utilisable.

Générer une clé RSA (alternative)

Si la compatibilité avec des systèmes très anciens est requise, vous pouvez générer une clé RSA, en veillant à spécifier une longueur de clé suffisante (au moins 4096 bits) :

ssh-keygen -t rsa -b 4096 -C "commentaire_clé_rsa"

Fichiers de sortie de la clé

Après la génération, deux fichiers sont créés dans votre répertoire ~/.ssh/ (en supposant les valeurs par défaut) :

  • id_ed25519 (ou id_rsa) : Votre clé privée
  • id_ed25519.pub (ou id_rsa.pub) : Votre clé publique

Meilleure pratique de sécurité : Ne partagez jamais le fichier sans l'extension .pub. Définissez des permissions restrictives sur votre clé privée avec chmod 600 ~/.ssh/id_ed25519.

Étape 2 : Copier la clé publique sur le serveur

Le serveur distant doit avoir votre clé publique dans son fichier ~/.ssh/authorized_keys pour accorder l'accès.

Utiliser ssh-copy-id (la méthode la plus simple)

L'utilitaire ssh-copy-id automatise le processus, en gérant la création de répertoires et les paramètres de permissions sur le serveur distant. Vous devrez vous authentifier avec un mot de passe une dernière fois pour cette configuration initiale.

ssh-copy-id utilisateur@adresse_ip_hôte_distant

En cas de succès, la commande vous informera que les clés ont été ajoutées. Vous pouvez maintenant tenter de vous connecter.

Copie manuelle (si ssh-copy-id n'est pas disponible)

Si vous ne pouvez pas utiliser ssh-copy-id, vous pouvez ajouter manuellement le contenu de la clé publique. Tout d'abord, affichez la clé publique :

cat ~/.ssh/id_ed25519.pub

Ensuite, connectez-vous au serveur distant en utilisant votre mot de passe et ajoutez la sortie au fichier authorized_keys :

# Sur le serveur distant
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# Remplacez <COLLER_VOTRE_CLÉ_PUBLIQUE_ICI> par le contenu réel de la clé
echo "<COLLER_VOTRE_CLÉ_PUBLIQUE_ICI>" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

Étape 3 : Sécuriser l'accès avec ssh-agent

Taper votre phrase de passe à chaque fois que vous vous connectez à un serveur devient fastidieux. Le ssh-agent est un programme d'arrière-plan qui conserve en mémoire vos clés privées déchiffrées en toute sécurité, vous permettant de les utiliser sans avoir à saisir à plusieurs reprises la phrase de passe.

Démarrer et utiliser ssh-agent

  1. Assurez-vous que l'agent est en cours d'exécution : Sur la plupart des systèmes Linux/macOS modernes, l'agent démarre automatiquement lorsque vous vous connectez. Vous pouvez vérifier son état en recherchant les variables d'environnement :

    echo $SSH_AUTH_SOCK
    
  2. Ajoutez votre clé à l'agent : Utilisez la commande ssh-add pour charger votre clé privée. La phrase de passe ne vous sera demandée qu'une seule fois.

    ssh-add ~/.ssh/id_ed25519
    # Entrez la phrase de passe pour /home/utilisateur/.ssh/id_ed25519 : **********
    # Identité ajoutée : /home/utilisateur/.ssh/id_ed25519 (commentaire)
    
  3. Vérifiez les clés chargées :

    ssh-add -l
    

Maintenant, lorsque vous exécutez ssh utilisateur@adresse_ip_hôte_distant, la connexion s'authentifiera en utilisant la clé détenue par l'agent sans demander à nouveau la phrase de passe (jusqu'à la fin de la session de l'agent).

Remarques importantes sur ssh-agent

  • Dépend de la session : Les clés chargées dans l'agent ne sont généralement disponibles que pour la session de terminal en cours ou la session de connexion au bureau. Vous devrez réexécuter ssh-add après vous être déconnecté et reconnecté.
  • Durée de vie de la clé : Vous pouvez définir une durée de vie maximale pour les clés conservées dans l'agent à l'aide de l'indicateur -t (par exemple, ssh-add -t 1h ~/.ssh/id_ed25519 conserve la clé chargée pendant une heure).

Sécurité avancée : Désactiver l'authentification par mot de passe

Une fois que vous avez confirmé que l'authentification par clé fonctionne parfaitement sur tous les serveurs requis, la mesure de sécurité la plus forte consiste à désactiver complètement les connexions par mot de passe. Cela empêche les attaques par force brute contre les mots de passe.

  1. Connectez-vous à votre serveur via SSH en utilisant votre clé.

  2. Modifiez le fichier de configuration du démon SSH, généralement situé dans /etc/ssh/sshd_config :

    sudo nano /etc/ssh/sshd_config
    
  3. Recherchez et définissez les directives suivantes :

    # Assurez-vous que ceci est défini sur yes (généralement par défaut)
    PubkeyAuthentication yes
    
    # Désactiver les connexions par mot de passe
    PasswordAuthentication no
    
  4. Vérifiez la configuration avant de redémarrer :

    sudo sshd -t
    
  5. Redémarrez le service SSH pour appliquer les modifications. Le nom du service est généralement sshd sur les systèmes de la famille RHEL et ssh sur Debian/Ubuntu :

    sudo systemctl restart sshd
    # ou
    sudo systemctl restart ssh
    

Avertissement : Avant de désactiver l'authentification par mot de passe, gardez une session SSH active ouverte et confirmez qu'une deuxième connexion fonctionne avec la nouvelle clé. Si le redémarrage échoue ou si la clé est erronée, vous aurez besoin d'un accès console ou hors bande.

Prochaines étapes

Après votre première connexion basée sur une clé, traitez les clés SSH comme des identifiants de production :

  • Générez une paire de clés unique pour chaque système ou service majeur auquel vous accédez.
  • Auditez régulièrement le fichier authorized_keys sur les serveurs critiques.
  • Supprimez les anciennes clés lorsque les personnes changent de rôle ou que les machines sont mises hors service.
  • Utilisez ssh-add -t pour des sessions d'agent de courte durée sur des postes de travail partagés.