Aller au contenu
English
Compte : non connecté, synchronisation possible Mon apprentissage
Selectionner le thème
English

Créer et gérer des clés SSH

Par mis à jour le

Améliorer cette page

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").

  • 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_keys manuellement quand nécessaire
  • Utiliser ssh-agent pour 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
SituationTechnique
Se connecter sans mot de passe à un serveurssh-keygen + ssh-copy-id
Lancer Ansible sans être interrompuclé sans passphrase ou ssh-agent
Accéder à GitHub / GitLab en SSHclé dédiée + config ~/.ssh/config
Examen RHCSA, tâche "configure key-based auth"ssh-keygen + authorized_keys
Poste client sans ssh-copy-id (OpenSSH de Windows)copie manuelle de la clé publique

ssh-keygen produit deux fichiers : la clé privée, qui ne quitte jamais votre poste, et la clé publique en .pub, destinée à être copiée sur les serveurs. Le choix de l'algorithme se fait ici et ne se change pas après coup.

Fenêtre de terminal
ssh-keygen -t ed25519 -C "bob@workstation"

La commande pose deux questions. À Enter file, appuyez sur Entrée pour garder l'emplacement par défaut (~/.ssh/id_ed25519). À Enter passphrase, saisissez une phrase secrète : elle chiffre la clé privée sur le disque, et un vol du fichier ne suffit plus à se connecter. Sortie mesurée sur Debian 13 (OpenSSH 10.0), empreinte propre à chaque clé :

Generating public/private ed25519 key pair.
Your identification has been saved in /home/bob/.ssh/id_ed25519
Your public key has been saved in /home/bob/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:wzADwtgppDzS9xC3BfogrcBzlncuuUHV7l0+w0Y1n+I bob@workstation

RSA reste utile face à un équipement ancien qui ne connaît pas Ed25519 : la clé est plus longue à générer et plus lourde à vérifier, mais elle est acceptée partout.

Fenêtre de terminal
ssh-keygen -t rsa -b 4096 -C "bob@workstation"

L'option -f choisit le nom du fichier : une clé par usage limite les dégâts si l'une d'elles fuit, et permet de la révoquer sans toucher aux autres. Le commentaire -C rappelle à quoi sert la clé dans authorized_keys.

Fenêtre de terminal
# Clé dédiée au serveur de backup
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_backup -C "backup@workstation"
# Clé pour GitHub
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_github -C "bob@github"

Déployer une clé revient à ajouter son contenu public au fichier ~/.ssh/authorized_keys du compte cible. Les permissions de ce fichier et de son répertoire comptent autant que son contenu : trop ouvertes, le serveur SSH refuse la clé sans le dire au client.

Fenêtre de terminal
ssh-copy-id bob@192.168.1.10

ssh-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 :

Fenêtre de terminal
ssh-copy-id -p 2222 bob@192.168.1.10
ssh-copy-id -i ~/.ssh/id_ed25519_backup.pub bob@backup.example.com

Vérifier que ça fonctionne :

Fenêtre de terminal
ssh bob@192.168.1.10
# doit se connecter sans demander de mot de passe (ou avec la passphrase de clé)

ssh-copy-id est livré avec le client OpenSSH, dans openssh-client sur Debian et openssh-clients sur RHEL (mesuré sur Debian 13 et AlmaLinux 10). La méthode manuelle reste à connaître : un poste sans ssh-copy-id, comme le client OpenSSH de Windows, ou un serveur où la connexion par mot de passe est déjà fermée, vous obligent à écrire authorized_keys vous-même :

  1. Afficher la clé publique sur la machine cliente

    Fenêtre de terminal
    cat ~/.ssh/id_ed25519.pub

    Copiez la ligne entière (commence par ssh-ed25519).

  2. Sur le serveur distant, préparer authorized_keys

    Fenêtre de terminal
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    echo "ssh-ed25519 AAAA... bob@workstation" >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
  3. Vérifier la connexion

    Fenêtre de terminal
    ssh bob@192.168.1.10

C'est le premier point à vérifier si l'authentification par clé échoue :

Fenêtre de terminal
# Répertoire SSH
chmod 700 ~/.ssh
# Clé privée : lisible uniquement par le propriétaire
chmod 600 ~/.ssh/id_ed25519
# Clé publique : peut être lue par tous
chmod 644 ~/.ssh/id_ed25519.pub
# Fichier de clés autorisées : critique
chmod 600 ~/.ssh/authorized_keys
# Fichier de configuration client
chmod 600 ~/.ssh/config
# Hôtes connus
chmod 644 ~/.ssh/known_hosts

Vérification rapide :

Fenêtre de terminal
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 97 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 config

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.

Fenêtre de terminal
# 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 fois
ssh-add ~/.ssh/id_ed25519
# Vérifier les clés chargées
ssh-add -l

La sortie de ssh-add -l donne la taille de la clé, son empreinte, son commentaire et son type. Mesurée sur Debian 13 :

256 SHA256:wzADwtgppDzS9xC3BfogrcBzlncuuUHV7l0+w0Y1n+I bob@workstation (ED25519)

Une clé chargée dans l'agent reste utilisable par tout processus de votre session. L'option -t borne cette exposition : passé le délai, l'agent oublie la clé et la passphrase sera redemandée.

Fenêtre de terminal
# Clé mémorisée pendant 4 heures
ssh-add -t 4h ~/.ssh/id_ed25519

Quand vous utilisez plusieurs clés (serveurs de production, serveurs de backup, GitHub, GitLab), déclarez-les dans ~/.ssh/config :

# GitHub
Host github.com
User git
IdentityFile ~/.ssh/id_ed25519_github
# Serveurs de backup
Host 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_prod

Sans 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, désactivez les connexions par mot de passe pour réduire la surface d'attaque. Le piège est l'endroit où l'écrire : sshd_config commence par Include /etc/ssh/sshd_config.d/*.conf, et la première valeur lue l'emporte. Un fichier de ce répertoire qui dit PasswordAuthentication yes annule la ligne ajoutée plus bas dans sshd_config : mesuré sur Debian 13 et AlmaLinux 10 avec un tel fichier, sshd -T affiche toujours yes. Le cas n'a rien d'exotique : l'image AlmaLinux 10 livre déjà un 25-permitrootlogin.conf qui fixe PermitRootLogin yes. Écrivez donc la règle dans un fichier au numéro bas, lu en premier :

Fenêtre de terminal
# Sur le serveur
echo 'PasswordAuthentication no' | sudo tee /etc/ssh/sshd_config.d/10-durcissement.conf
sudo sshd -t # syntaxe : aucune sortie si tout va bien
sudo sshd -T | grep -i '^passwordauthentication' # valeur effective : no
Fenêtre de terminal
# Recharger le service
sudo systemctl reload ssh # Debian/Ubuntu
sudo systemctl reload sshd # RHEL/Fedora

SymptômeCause probableAction
Permission denied (publickey)Permissions ~/.ssh/ incorrectesCorriger avec chmod 700 ~/.ssh && chmod 600 authorized_keys
Permission denied (publickey)Clé publique absente de authorized_keysVérifier avec cat ~/.ssh/authorized_keys côté serveur
SSH demande toujours le mot de passePasswordAuthentication yes lu en premier dans sshd_config.d/sudo sshd -T | grep -i passwordauthentication, puis un drop-in 10-*.conf
Too many authentication failuresTrop de clés essayéesAjouter 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 RHELSELinux contexte incorrect sur ~/.ssh/restorecon -Rv ~/.ssh

Configurer l'accès par clé pour son propre compte est une chose ; le faire proprement pour un utilisateur de service en est une autre. Sur une VM, ce lab vous fait générer une paire Ed25519, déployer la clé publique dans authorized_keys avec les bonnes permissions, puis durcir la connexion de ce compte.

  • Ed25519 est le choix recommandé en 2026, compact, rapide, sûr
  • Les permissions ~/.ssh/ sont non négociables : 700 sur le dossier, 600 sur authorized_keys et les clés privées
  • ssh-copy-id est la méthode rapide ; la copie manuelle dans authorized_keys sert quand l'outil manque, par exemple depuis Windows
  • PasswordAuthentication no s'écrit dans un drop-in lu en premier, et se vérifie avec sshd -T
  • ssh-agent élimine la saisie répétée de passphrase sans sacrifier la sécurité
  • Sur RHEL, penser à restorecon si SELinux est actif et bloque l'authentification par clé

Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

6 questions
6 min.
70% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

Ce projet vous est utile ?

Les guides, formations, quiz et labs restent gratuits. Si vous les utilisez régulièrement, vous pouvez contribuer à leur maintenance et à leur développement.

Devenir membre de soutien (nouvel onglet) Soutenir une fois (nouvel onglet) En savoir plus

Suivez aussi le projet sur LinkedIn