Comment générer et sécuriser des clés SSH pour l'accès à distance
Secure Shell (SSH) est le protocole standard pour se connecter de manière sécurisée aux serveurs et systèmes distants. Bien que l'authentification par mot de passe soit courante, l'utilisation de paires de clés SSH offre une méthode d'authentification significativement plus forte, plus pratique et plus résiliente. Ce guide complet vous accompagnera à travers la génération de paires de clés SSH robustes, leur sécurisation avec des phrases secrètes, et l'utilisation de l'ssh-agent pour un accès à distance fluide et sécurisé.
Comprendre la gestion des clés est crucial pour maintenir la sécurité de votre infrastructure. En remplaçant les mots de passe vulnérables par des clés cryptographiques, vous atténuez les risques associés aux attaques par force brute et au bourrage d'identifiants (credential stuffing), établissant ainsi un socle de connectivité distante sécurisée.
Comprendre les paires de clés SSH
Une paire de clés SSH se compose de deux composants distincts :
- La clé privée : Cette clé ne doit jamais être partagée. Elle reste sécurisée sur votre machine locale et est utilisée pour prouver votre identité au serveur distant.
- La clé publique : Cette clé est librement partagée et téléchargée dans le fichier
~/.ssh/authorized_keyssur le ou les serveurs distants auxquels 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, il est essentiel de sélectionner un algorithme cryptographique moderne et robuste. RSA est toujours largement utilisé, mais Ed25519 est souvent recommandé pour sa rapidité et ses solides garanties de sécurité.
É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 sur 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]_or_host_name"
Lorsque vous y êtes invité :
- Enter file in which to save the key : Appuyez sur Entrée pour accepter l'emplacement par défaut (
/home/user/.ssh/id_ed25519). - Enter passphrase (recommended) : Toujours définir une phrase secrète forte. Cela chiffre votre clé privée, donc même si quelqu'un vole le fichier, il ne pourra pas l'utiliser sans la phrase secrète.
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 vous assurant de spécifier une longueur de clé suffisante (au moins 4096 bits) :
ssh-keygen -t rsa -b 4096 -C "your_rsa_key_comment"
Fichiers de sortie des clés
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(ouid_rsa) : Votre clé privéeid_ed25519.pub(ouid_rsa.pub) : Votre clé publique
Bonne pratique de sécurité : Ne partagez jamais le fichier sans l'extension
.pub. Définissez des permissions restrictives sur votre clé privée (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.
Utilisation de ssh-copy-id (la méthode la plus simple)
L'utilitaire ssh-copy-id automatise le processus, 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 user@remote_host_ip
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. 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 <PASTE_YOUR_PUBLIC_KEY_HERE> par le contenu réel de la clé
echo "<PASTE_YOUR_PUBLIC_KEY_HERE>" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Étape 3 : Sécuriser l'accès avec ssh-agent
Taper votre phrase secrète à chaque fois que vous vous connectez à un serveur devient fastidieux. L'ssh-agent est un programme en arrière-plan qui conserve vos clés privées déchiffrées en mémoire de manière sécurisée, vous permettant de les utiliser sans saisir la phrase secrète à plusieurs reprises.
Démarrer et utiliser ssh-agent
-
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 statut en recherchant les variables d'environnement :
bash echo $SSH_AUTH_SOCK -
Ajoutez votre clé à l'agent : Utilisez la commande
ssh-addpour charger votre clé privée. Il vous sera demandé la phrase secrète une seule fois.```bash
ssh-add ~/.ssh/id_ed25519Entrez la phrase secrète pour /home/user/.ssh/id_ed25519 : ****
Identité ajoutée : /home/user/.ssh/id_ed25519 (commentaire)
```
-
Vérifiez les clés chargées :
bash ssh-add -l
Maintenant, lorsque vous exécutez ssh user@remote_host_ip, la connexion s'authentifiera en utilisant la clé détenue par l'agent sans demander à nouveau la phrase secrète (jusqu'à la fin de la session de l'agent).
Notes importantes concernant ssh-agent
- Dépendant de la session : Les clés chargées dans l'agent ne sont généralement disponibles que pour la session de terminal ou la session de connexion de bureau actuelle. Vous devrez réexécuter
ssh-addaprè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 détenues par l'agent en utilisant l'option
-t(par exemple,ssh-add -t 1h ~/.ssh/id_ed25519maintient 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 entièrement les connexions par mot de passe. Cela empêche les attaques par force brute contre les mots de passe.
- Connectez-vous à votre serveur via SSH en utilisant votre clé.
-
Modifiez le fichier de configuration du démon SSH, généralement situé à
/etc/ssh/sshd_config:bash sudo nano /etc/ssh/sshd_config -
Trouvez et définissez les directives suivantes :
```config
Assurez-vous que ceci est réglé sur yes (généralement par défaut)
PubkeyAuthentication yes
Désactive les connexions par mot de passe
PasswordAuthentication no
```
-
Redémarrez le service SSH pour appliquer les modifications :
```bash
sudo systemctl restart sshd # Pour les systèmes basés sur systemd (la plupart des Linux modernes)OU
sudo service ssh restart # Systèmes plus anciens
```
Avertissement : Avant de désactiver l'authentification par mot de passe, assurez-vous de vous être connecté avec succès au moins une fois en utilisant votre nouvelle clé. Vous bloquer en raison d'une erreur de configuration est une erreur courante et récupérable, mais cela nécessite un accès console ou alternatif.
Résumé et prochaines étapes
Générer et gérer les clés SSH est une compétence fondamentale pour l'administration système sécurisée. En suivant ces étapes — générer des clés Ed25519 modernes, protéger la clé privée avec une phrase secrète forte, installer de manière sécurisée la clé publique sur les serveurs cibles et tirer parti de l'ssh-agent — vous établissez un mécanisme d'authentification hautement sécurisé et efficace.
Prochaines étapes :
- 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_keyssur les serveurs critiques. - Utilisez des phrases secrètes différentes pour différentes paires de clés si possible, ou assurez-vous au moins qu'elles sont complexes.