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 :
- Votre client SSH présente votre clé publique au serveur.
- Le serveur vérifie si cette clé publique est autorisée (c'est-à-dire présente dans son fichier
authorized_keys). - Si elle est autorisée, le serveur envoie un défi à votre client.
- Votre client signe le défi avec votre clé privée et renvoie la signature au serveur.
- 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.ed25519est un algorithme de cryptographie à courbe elliptique moderne, très sécurisé et rapide. D'autres options courantes incluentrsa(par exemple,ssh-keygen -t rsa -b 4096pour une clé RSA de 4096 bits).
Lors de l'exécution de la commande, quelques questions vous seront posées :
- 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) etid_ed25519.pub(votre clé publique). - 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.
- 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(ouid_rsa) : Votre clé privée. NE PARTAGEZ JAMAIS CE FICHIER. Limitez ses permissions en lecture seule pour votre utilisateur.id_ed25519.pub(ouid_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) :
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.ssh-add ~/.ssh/id_ed25519
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_keyssur 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 fichierauthorized_keys. - Audits réguliers : Examinez périodiquement les fichiers
authorized_keyssur 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.