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

Générez des clés SSH, copiez les clés publiques sur les serveurs, utilisez ssh-agent et gérez en toute sécurité la configuration SSH spécifique à chaque hôte.

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

Les clés SSH vous permettent de vous connecter à des serveurs sans envoyer un mot de passe réutilisable sur le réseau. Si vous gérez des serveurs Linux, des instances cloud ou des dépôts Git distants, une clé SSH correctement protégée est généralement plus sûre et plus facile que la connexion par mot de passe.

Ce guide du débutant vous montre comment générer une paire de clés SSH, copier la clé publique sur un serveur, vous connecter avec la bonne clé privée et garder vos clés gérables à mesure que votre liste de serveurs s'agrandit.

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 mathématiquement liées, mais il est informatiquement impossible de dériver la clé privée à partir de la clé publique.

  • Clé privée : Cette clé doit rester 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 déroule :

  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 elle est autorisée, le serveur envoie un défi à votre client.
  4. Votre client signe le défi avec votre clé privée et renvoie la signature au serveur.
  5. Le serveur vérifie la signature avec votre clé publique. Si la signature est valide, l'authentification est accordée sans 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 invite de commande et exécutez la commande suivante :

ssh-keygen -t ed25519

Détaillons 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).

Lors de l'exécution de 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 de passe (vide pour aucune phrase de passe) : C'est une étape de sécurité cruciale. Saisir une phrase de passe chiffre votre clé privée sur le disque. Si votre fichier de clé privée est compromis, l'attaquant aura toujours besoin de la phrase de passe pour l'utiliser. Il est fortement recommandé d'utiliser une phrase de passe forte.
  3. Entrez à nouveau la même phrase de passe : Confirmez votre phrase de passe.

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 PARTAGEZ JAMAIS CE FICHIER. Limitez 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 a les bonnes permissions de fichier. Sous Linux/macOS, exécutez :

chmod 600 ~/.ssh/id_ed25519

Cette commande restreint les permissions 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(s) serveur(s) distant(s) auquel(s) 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 sur 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. Il vous sera demandé le mot de passe de l'utilisateur sur l'hôte_distant 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. Tout d'abord, affichez le contenu de votre clé publique sur votre machine locale :

cat ~/.ssh/id_ed25519.pub

Copiez la sortie entière. 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 a les permissions correctes :

chmod 600 ~/.ssh/authorized_keys

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

Se connecter avec des clés SSH

Une fois votre clé publique 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 de passe 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 de passe, vous serez connecté directement.

Spécifier une clé différente

Si vous avez plusieurs paires de clés SSH ou si votre clé n'est 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

Gérer les clés SSH

À mesure que vous accédez à 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 de passe. Cela vous permet d'utiliser vos clés pour plusieurs connexions SSH sans avoir à ressaisir votre phrase de passe à 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 :
    eval "$(ssh-agent -s)"
    
  • Ajouter des clés à l'agent : Une fois l'agent en cours d'exécution, ajoutez votre(vos) clé(s) privée(s) :
    ssh-add ~/.ssh/id_ed25519
    
    Il vous sera demandé votre phrase de passe. 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. C'est extrêmement 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 *
  ServerAliveInterval 60

# Serveur 1 : Serveur Web
Host serveurweb
  HostName 192.168.1.100
  User adminweb
  Port 2222
  IdentityFile ~/.ssh/cle_serveurweb

# Serveur 2 : Serveur de base de données
Host serveurbd
  HostName bd.exemple.com
  User utilisateurbd
  IdentityFile ~/.ssh/cle_bd

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

ssh serveurweb

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

ssh serveurbd

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. Évitez d'activer ForwardAgent yes globalement ; le transfert d'agent est utile pour certains workflows de serveur de rebond, mais il expose votre socket d'agent à l'hôte distant pendant que la session est active.

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é.

Bonnes pratiques et conseils de sécurité

  • Utilisez des phrases de passe : Protégez toujours vos clés privées avec des phrases de passe fortes. C'est votre principale défense contre une 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 : Tirez parti de l'agent SSH pour éviter de taper à plusieurs reprises votre phrase de passe.
  • 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 forts comme Ed25519. Évitez les anciennes clés RSA sans une longueur de bits 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.

À retenir

Les clés SSH valent la peine d'être configurées avant d'avoir besoin d'un accès d'urgence au serveur. Générez une clé moderne, protégez la clé privée avec une phrase de passe, copiez uniquement la clé publique sur les serveurs et supprimez les clés obsolètes de authorized_keys lorsque l'accès change.