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 :
- 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 l'autorisation est accordée, le serveur envoie un défi à votre client.
- Votre client utilise votre clé privée pour chiffrer le défi et renvoie la réponse chiffrée au serveur.
- 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.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).
Après avoir exécuté 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 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.
- 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(ouid_rsa) : Votre clé privée. NE JAMAIS PARTAGER CE FICHIER. Restreignez 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 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_keyssur 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 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.
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.