Guide du débutant sur les clés SSH : Générer, utiliser et gérer en toute sécurité

Déverrouillez l'accès à distance sécurisé et sans mot de passe grâce aux clés SSH. Ce guide du débutant explique comment générer des paires de clés SSH à l'aide de `ssh-keygen`, les déployer sur des serveurs avec `ssh-copy-id`, et gérer les clés efficacement avec `ssh-agent` et les fichiers de configuration. Découvrez les meilleures pratiques pour renforcer la sécurité de votre serveur et simplifier les connexions.

45 vues

Guide du débutant sur les clés SSH : Générer, Utiliser et Gérer en toute sécurité

Secure Shell (SSH) est la norme de facto pour l'accès distant sécurisé aux serveurs et autres périphériques réseau. Bien que l'authentification par mot de passe soit courante, elle peut être vulnérable aux attaques par force brute et nécessite de mémoriser des mots de passe complexes. Les clés SSH offrent une alternative plus robuste et plus pratique, permettant une authentification sans mot de passe et améliorant votre posture de sécurité globale.

Ce guide vous accompagnera à travers les étapes essentielles de la génération, du déploiement et de la gestion des paires de clés SSH. En comprenant et en appliquant ces pratiques, vous pouvez améliorer considérablement la sécurité de votre accès distant et rationaliser votre flux de travail. Nous couvrirons les concepts de base, les commandes pratiques et les meilleures pratiques pour vous lancer dans l'authentification par clé SSH.

Comprendre les paires de clés SSH

L'authentification par clé SSH repose sur une paire de clés cryptographiques : une clé privée et une clé publique. Ces clés sont liées mathématiquement, mais il est pratiquement impossible de dériver la clé privée à partir de la clé publique.

  • Clé privée : Cette clé doit être gardée secrète et ne doit jamais être partagée. Elle réside sur votre machine locale et sert d'identité. Lorsque vous initiez une connexion SSH, votre client utilise votre clé privée pour prouver votre identité.
  • Clé publique : Cette clé peut être partagée librement. Vous placerez votre clé publique sur les serveurs distants auxquels vous souhaitez accéder. Lorsque vous tentez de vous connecter, le serveur utilise votre clé publique pour vérifier que vous possédez la clé privée correspondante.

Lorsque vous tentez de vous connecter à un serveur, le processus suivant se produit :

  1. Votre client SSH présente votre clé publique au serveur.
  2. Le serveur vérifie si cette clé publique est autorisée (c'est-à-dire présente dans son fichier authorized_keys).
  3. Si l'autorisation est accordée, le serveur envoie un défi à votre client.
  4. Votre client utilise votre clé privée pour chiffrer le défi et renvoie la réponse chiffrée au serveur.
  5. Le serveur déchiffre la réponse en utilisant votre clé publique. Si le déchiffrement réussit et correspond au défi initial, l'authentification est accordée sans nécessiter de mot de passe.

Générer des paires de clés SSH

L'outil le plus courant pour générer des paires de clés SSH est ssh-keygen. Cette commande est disponible sur la plupart des systèmes Linux, macOS et Windows (via WSL ou Git Bash).

Utiliser ssh-keygen

Pour générer une nouvelle paire de clés SSH, ouvrez votre terminal ou votre invite de commande et exécutez la commande suivante :

ssh-keygen -t ed25519

Décortiquons cette commande :

  • ssh-keygen : La commande pour générer des clés SSH.
  • -t ed25519 : Spécifie le type de clé à créer. ed25519 est un algorithme de cryptographie à courbe elliptique moderne, très sécurisé et rapide. D'autres options courantes incluent rsa (par exemple, ssh-keygen -t rsa -b 4096 pour une clé RSA de 4096 bits).

Après avoir exécuté la commande, quelques questions vous seront posées :

  1. Entrez le fichier dans lequel enregistrer la clé (par exemple, /home/votre_utilisateur/.ssh/id_ed25519) : Appuyez sur Entrée pour accepter l'emplacement par défaut. Cela créera deux fichiers dans votre répertoire .ssh : id_ed25519 (votre clé privée) et id_ed25519.pub (votre clé publique).
  2. Entrez une phrase secrète (laisser vide pour aucune phrase secrète) : Il s'agit d'une étape de sécurité cruciale. Saisir une phrase secrète chiffre votre clé privée sur le disque. Si votre fichier de clé privée est compromis, l'attaquant aurait toujours besoin de la phrase secrète pour l'utiliser. Il est fortement recommandé d'utiliser une phrase secrète forte.
  3. Retapez la même phrase secrète : Confirmez votre phrase secrète.

Comprendre les fichiers de sortie

Après la génération, deux fichiers seront créés dans votre répertoire ~/.ssh/ (ou le chemin que vous avez spécifié) :

  • id_ed25519 (ou id_rsa) : Votre clé privée. NE JAMAIS PARTAGER CE FICHIER. Restreignez ses permissions en lecture seule pour votre utilisateur.
  • id_ed25519.pub (ou id_rsa.pub) : Votre clé publique. C'est la clé que vous distribuerez aux serveurs.

Sécuriser votre clé privée

Il est essentiel de s'assurer que votre clé privée possède les bonnes permissions de fichier. Sur Linux/macOS, exécutez :

chmod 600 ~/.ssh/id_ed25519

Cette commande restreint les droits de lecture et d'écriture au seul propriétaire du fichier, empêchant les autres utilisateurs du système d'accéder à votre clé privée.

Déployer votre clé publique sur un serveur

Une fois que vous avez généré votre paire de clés SSH, vous devez placer votre clé publique sur le ou les serveurs distants auxquels vous souhaitez accéder.

Utiliser ssh-copy-id (Recommandé)

ssh-copy-id est un script utilitaire qui simplifie le processus de copie de votre clé publique vers un serveur distant. Il ajoute automatiquement votre clé publique au fichier ~/.ssh/authorized_keys sur le serveur et définit les permissions correctes.

Pour utiliser ssh-copy-id, exécutez la commande suivante depuis votre machine locale :

ssh-copy-id utilisateur@hôte_distant

Remplacez utilisateur par votre nom d'utilisateur sur le serveur distant et hôte_distant par l'adresse IP ou le nom d'hôte du serveur. Le mot de passe de l'utilisateur sur l'hôte_distant vous sera demandé une dernière fois pour autoriser le transfert de clé.

Si vous utilisez un port SSH non standard (par exemple, 2222), vous pouvez le spécifier avec l'option -p :

ssh-copy-id -p 2222 utilisateur@hôte_distant

Déploiement manuel (Si ssh-copy-id n'est pas disponible)

Si ssh-copy-id n'est pas disponible, vous pouvez copier manuellement votre clé publique. Affichez d'abord le contenu de votre clé publique sur votre machine locale :

cat ~/.ssh/id_ed25519.pub

Copiez l'intégralité du résultat. Ensuite, connectez-vous en SSH à votre serveur distant en utilisant votre mot de passe :

ssh utilisateur@hôte_distant

Une fois connecté, créez le répertoire .ssh s'il n'existe pas, puis créez ou ajoutez au fichier authorized_keys :

mkdir -p ~/.ssh
chmod 700 ~/.ssh

Maintenant, collez le contenu de votre clé publique dans le fichier authorized_keys. Vous pouvez le faire en utilisant un éditeur de texte comme nano ou vim :

nano ~/.ssh/authorized_keys

Collez la clé publique copiée sur une nouvelle ligne. Enregistrez et quittez l'éditeur.

Enfin, assurez-vous que le fichier authorized_keys possède les permissions correctes :

chmod 600 ~/.ssh/authorized_keys

Après avoir effectué ces étapes, vous devriez pouvoir vous connecter en SSH au serveur sans mot de passe.

Se connecter avec des clés SSH

Une fois que votre clé publique est sur le serveur, vous pouvez vous connecter en utilisant votre clé privée. Le client SSH essaiera automatiquement d'utiliser les clés trouvées dans ~/.ssh/.

ssh utilisateur@hôte_distant

Si vous avez utilisé une phrase secrète lors de la génération de la clé, il vous sera demandé de la saisir maintenant. Si vous n'avez pas utilisé de phrase secrète, vous serez connecté directement.

Spécifier une clé différente

Si vous avez plusieurs paires de clés SSH ou si votre clé ne se trouve pas à l'emplacement par défaut, vous pouvez spécifier quelle clé privée utiliser avec l'option -i :

ssh -i /chemin/vers/votre/clé_privée utilisateur@hôte_distant

Gestion des clés SSH

À mesure que vous accédez à de plus en plus de serveurs, vous accumulerez plus de clés SSH. Une gestion efficace est essentielle pour maintenir la sécurité et la commodité.

Agent SSH

L'agent SSH est un programme d'arrière-plan qui conserve vos clés privées en mémoire, déchiffrées avec votre phrase secrète. Cela vous permet d'utiliser vos clés pour plusieurs connexions SSH sans ressaisir votre phrase secrète à chaque fois.

  • Démarrer l'agent SSH : L'agent est souvent démarré automatiquement lorsque vous vous connectez à votre environnement de bureau. Sinon, vous pouvez le démarrer manuellement :
    bash eval "$(ssh-agent -s)"
  • Ajouter des clés à l'agent : Une fois l'agent en cours d'exécution, ajoutez votre ou vos clés privées :
    bash ssh-add ~/.ssh/id_ed25519
    Il vous sera demandé votre phrase secrète. Après cela, l'agent gérera la clé, et les connexions SSH ultérieures l'utiliseront automatiquement.

Fichier de configuration SSH (~/.ssh/config)

Le fichier de configuration du client SSH (~/.ssh/config) vous permet de définir des alias pour les hôtes et de spécifier les paramètres de connexion, y compris la clé à utiliser pour un hôte spécifique. Ceci est incroyablement utile pour gérer plusieurs serveurs.

Créez ou modifiez le fichier ~/.ssh/config sur votre machine locale et ajoutez des entrées comme celle-ci :

# Paramètres par défaut
Host *
  ForwardAgent yes
  ServerAliveInterval 60

# Serveur 1 : Serveur Web
Host webserver
  HostName 192.168.1.100
  User webadmin
  Port 2222
  IdentityFile ~/.ssh/webserver_key

# Serveur 2 : Serveur de base de données
Host dbserver
  HostName db.example.com
  User dbuser
  IdentityFile ~/.ssh/db_key

Avec cette configuration, vous pouvez vous connecter au serveur web en utilisant :

ssh webserver

Et au serveur de base de données en utilisant :

ssh dbserver

Le client SSH utilisera automatiquement le nom d'utilisateur, le port et le fichier de clé privée corrects tels que définis dans le fichier ~/.ssh/config.

Rotation et révocation des clés

  • Rotation : Envisagez régulièrement de faire pivoter vos clés SSH, en particulier pour les systèmes hautement sensibles. Cela implique de générer de nouvelles clés et de remplacer les anciennes clés publiques sur les serveurs.
  • Révocation : Si une clé privée est compromise ou si vous n'avez plus besoin d'accès, vous devez supprimer la clé publique correspondante de tous les fichiers authorized_keys sur les serveurs où elle a été déployée. Ceci est essentiel pour maintenir la sécurité.

Meilleures pratiques et conseils de sécurité

  • Utilisez des phrases secrètes : Protégez toujours vos clés privées avec des phrases secrètes fortes. C'est votre principale défense contre toute utilisation non autorisée si le fichier de clé privée est volé.
  • Permissions sécurisées de la clé privée : Assurez-vous que votre fichier de clé privée a les permissions 600 (-rw-------).
  • Utilisez ssh-agent : Exploitez l'agent SSH pour éviter de taper votre phrase secrète à plusieurs reprises.
  • Désactivez l'authentification par mot de passe : Une fois que l'authentification par clé SSH fonctionne, envisagez de désactiver l'authentification par mot de passe sur vos serveurs pour une couche de sécurité supplémentaire.
  • Gardez les clés à jour : Utilisez des algorithmes modernes et robustes comme Ed25519. Évitez les anciennes clés RSA sans une longueur de bit suffisante (au moins 4096).
  • Soyez attentif à authorized_keys : N'ajoutez que des clés publiques provenant de sources fiables à votre fichier authorized_keys.
  • Audits réguliers : Examinez périodiquement les fichiers authorized_keys sur vos serveurs pour vous assurer que seules les clés autorisées sont présentes.

Conclusion

Les clés SSH sont un outil puissant pour améliorer la sécurité et la commodité de la gestion des serveurs distants. En maîtrisant la génération, le déploiement et la gestion des paires de clés SSH à l'aide d'outils comme ssh-keygen et ssh-copy-id, vous pouvez dépasser l'authentification par mot de passe et établir un flux de travail d'accès distant plus sûr et plus efficace. N'oubliez pas de privilégier la sécurité en utilisant des phrases secrètes fortes et en sécurisant vos clés privées.