L’authentification par clé SSH est plus sûre qu’un mot de passe et permet d’automatiser les connexions. C’est le préalable à tout ce qui suit dans le parcours SSH — sans clé configurée, pas de connexion sans mot de passe, pas d’Ansible fiable, pas de pipeline CI/CD.
C’est un objectif direct RHCSA (domaine Manage Security — “Configure key-based authentication for SSH”) et LFCS (domaine Networking — “Configure the OpenSSH server and client”).
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Générer une paire de clés Ed25519 (ou RSA 4096) avec une passphrase
- Déployer la clé publique sur un serveur avec
ssh-copy-id - Gérer
authorized_keysmanuellement quand nécessaire - Utiliser
ssh-agentpour mémoriser la passphrase en session - Corriger les permissions de
~/.ssh/qui bloquent silencieusement l’authentification - Travailler avec plusieurs clés pour plusieurs serveurs ou rôles
Dans quel contexte ?
Section intitulée « Dans quel contexte ? »| Situation | Technique |
|---|---|
| Se connecter sans mot de passe à un serveur | ssh-keygen + ssh-copy-id |
| Lancer Ansible sans être interrompu | clé sans passphrase ou ssh-agent |
| Accéder à GitHub / GitLab en SSH | clé dédiée + config ~/.ssh/config |
| Examen RHCSA — tâche “configure key-based auth” | ssh-keygen + authorized_keys |
Connexion à un serveur RHEL depuis RHEL (sans ssh-copy-id) | copie manuelle de la clé publique |
Générer une paire de clés
Section intitulée « Générer une paire de clés »Ed25519 — recommandé
Section intitulée « Ed25519 — recommandé »ssh-keygen -t ed25519 -C "bob@workstation"Options interactives :
- Enter file : appuyez sur Entrée pour l’emplacement par défaut (
~/.ssh/id_ed25519) - Passphrase : entrez une phrase secrète (fortement recommandé)
Résultat :
Your identification has been saved in /home/bob/.ssh/id_ed25519Your public key has been saved in /home/bob/.ssh/id_ed25519.pubThe key fingerprint is:SHA256:abc123... bob@workstationRSA 4096 — compatibilité maximale
Section intitulée « RSA 4096 — compatibilité maximale »ssh-keygen -t rsa -b 4096 -C "bob@workstation"Clé nommée pour un usage spécifique
Section intitulée « Clé nommée pour un usage spécifique »# Clé dédiée au serveur de backupssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_backup -C "backup@workstation"
# Clé pour GitHubssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_github -C "bob@github"Déployer la clé publique sur un serveur
Section intitulée « Déployer la clé publique sur un serveur »Avec ssh-copy-id (méthode recommandée)
Section intitulée « Avec ssh-copy-id (méthode recommandée) »ssh-copy-id bob@192.168.1.10ssh-copy-id se connecte par mot de passe, crée ~/.ssh/authorized_keys sur le serveur si nécessaire, et y ajoute votre clé publique.
Avec un port non standard ou une clé spécifique :
ssh-copy-id -p 2222 bob@192.168.1.10ssh-copy-id -i ~/.ssh/id_ed25519_backup.pub bob@backup.example.comVérifier que ça fonctionne :
ssh bob@192.168.1.10# doit se connecter sans demander de mot de passe (ou avec la passphrase de clé)Manuellement (RHCSA — sans ssh-copy-id)
Section intitulée « Manuellement (RHCSA — sans ssh-copy-id) »Sur RHEL, ssh-copy-id n’est pas toujours disponible. La méthode manuelle est aussi celle testée à l’examen :
-
Afficher la clé publique sur la machine cliente
Fenêtre de terminal cat ~/.ssh/id_ed25519.pubCopiez la ligne entière (commence par
ssh-ed25519). -
Sur le serveur distant, préparer
authorized_keysFenêtre de terminal mkdir -p ~/.sshchmod 700 ~/.sshecho "ssh-ed25519 AAAA... bob@workstation" >> ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keys -
Vérifier la connexion
Fenêtre de terminal ssh bob@192.168.1.10
Permissions obligatoires de ~/.ssh/
Section intitulée « Permissions obligatoires de ~/.ssh/ »C’est le premier point à vérifier si l’authentification par clé échoue :
# Répertoire SSHchmod 700 ~/.ssh
# Clé privée — lisible uniquement par le propriétairechmod 600 ~/.ssh/id_ed25519
# Clé publique — peut être lue par touschmod 644 ~/.ssh/id_ed25519.pub
# Fichier de clés autorisées — critiquechmod 600 ~/.ssh/authorized_keys
# Fichier de configuration clientchmod 600 ~/.ssh/config
# Hôtes connuschmod 644 ~/.ssh/known_hostsVérification rapide :
ls -la ~/.ssh/Résultat attendu :
drwx------ 2 bob bob 4096 Apr 9 10:00 .-rw------- 1 bob bob 411 Apr 9 10:00 id_ed25519-rw-r--r-- 1 bob bob 103 Apr 9 10:00 id_ed25519.pub-rw------- 1 bob bob 582 Apr 9 10:00 authorized_keys-rw------- 1 bob bob 180 Apr 9 10:00 configssh-agent — mémoriser la passphrase en session
Section intitulée « ssh-agent — mémoriser la passphrase en session »Si votre clé est protégée par une passphrase, SSH la demande à chaque connexion. ssh-agent mémorise la passphrase déverrouillée pour toute la session.
# Démarrer l'agent (si pas déjà démarré par le bureau)eval "$(ssh-agent -s)"
# Ajouter la clé — demande la passphrase une seule foisssh-add ~/.ssh/id_ed25519
# Vérifier les clés chargéesssh-add -lSortie de ssh-add -l :
256 SHA256:abc123... bob@workstation (ED25519)Durée de vie limitée
Section intitulée « Durée de vie limitée »# Clé mémorisée pendant 4 heuresssh-add -t 4h ~/.ssh/id_ed25519Gérer plusieurs clés
Section intitulée « Gérer plusieurs clés »Quand vous utilisez plusieurs clés (serveurs de production, serveurs de backup, GitHub, GitLab), déclarez-les dans ~/.ssh/config :
# GitHubHost github.com User git IdentityFile ~/.ssh/id_ed25519_github
# Serveurs de backupHost backup.example.com User backupuser IdentityFile ~/.ssh/id_ed25519_backup
# Serveurs de prod (toutes les IP du sous-réseau)Host 10.0.1.* User admin IdentityFile ~/.ssh/id_ed25519_prodSans cette configuration, SSH essaie les clés par défaut (id_ed25519, id_rsa…) dans l’ordre. Avec plusieurs clés, la déclaration explicite évite les erreurs “Too many authentication failures”.
Désactiver l’authentification par mot de passe (côté serveur)
Section intitulée « Désactiver l’authentification par mot de passe (côté serveur) »Une fois les clés déployées, il est recommandé de désactiver les connexions par mot de passe pour réduire la surface d’attaque :
# Sur le serveursudo vim /etc/ssh/sshd_configPasswordAuthentication noPubkeyAuthentication yes# Redémarrer le servicesudo systemctl restart ssh # Debian/Ubuntusudo systemctl restart sshd # RHEL/FedoraDépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Action |
|---|---|---|
Permission denied (publickey) | Permissions ~/.ssh/ incorrectes | Corriger avec chmod 700 ~/.ssh && chmod 600 authorized_keys |
Permission denied (publickey) | Clé publique absente de authorized_keys | Vérifier avec cat ~/.ssh/authorized_keys côté serveur |
| SSH demande toujours le mot de passe | PasswordAuthentication yes toujours actif | Vérifier /etc/ssh/sshd_config côté serveur |
Too many authentication failures | Trop de clés essayées | Ajouter IdentitiesOnly yes dans ~/.ssh/config |
ssh-add -l : “Could not open a connection to your authentication agent” | ssh-agent non démarré | eval "$(ssh-agent -s)" |
| Clé acceptée en lab mais refusée sur RHEL | SELinux contexte incorrect sur ~/.ssh/ | restorecon -Rv ~/.ssh |
À retenir
Section intitulée « À retenir »- Ed25519 est le choix recommandé en 2026 — compact, rapide, sûr
- Les permissions
~/.ssh/sont non négociables :700sur le dossier,600surauthorized_keyset les clés privées ssh-copy-idest la méthode rapide ; la copie manuelle dansauthorized_keysest la méthode RHCSAssh-agentélimine la saisie répétée de passphrase sans sacrifier la sécurité- Sur RHEL, penser à
restoreconsi SELinux est actif et bloque l’authentification par clé