Clés SSH Sécurisées
Gestion complète des clés SSH : génération, déploiement, agent et bonnes pratiques de sécurité.
Générer une Paire de Clés
Recommandation ANSSI
Selon les directives ANSSI, les clés RSA doivent faire minimum 3072 bits. Ed25519 est préféré : plus rapide, plus sûr, clés plus courtes.
Ed25519 (Recommandé)
RSA 4096 bits (Compatibilité)
Passphrase obligatoire
Toujours définir une phrase de passe forte. Sans passphrase, une clé volée = accès total.
Déployer la Clé Publique
Méthode 1 : ssh-copy-id (recommandé)
Méthode 2 : Manuelle
# Copier la clé publique
cat ~/.ssh/id_ed25519.pub | ssh user@server "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Méthode 3 : Cloud-init / Ansible
SSH Agent
L'agent garde les clés déchiffrées en mémoire pour éviter de ressaisir la passphrase.
# Démarrer l'agent
eval "$(ssh-agent -s)"
# Ajouter une clé (demande la passphrase une fois)
ssh-add ~/.ssh/id_ed25519
# Lister les clés chargées
ssh-add -l
# Supprimer toutes les clés
ssh-add -D
Persistance (Linux)
# ~/.bashrc ou ~/.zshrc
if [ -z "$SSH_AUTH_SOCK" ]; then
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519 2>/dev/null
fi
Agent Forwarding
# Connexion avec forwarding de l'agent
ssh -A user@bastion
# Depuis le bastion, accès au serveur final sans clé locale
ssh user@internal-server
Risque Agent Forwarding
Un admin root sur le bastion peut utiliser votre agent. Préférer ProxyJump.
Configuration SSH (~/.ssh/config)
# Serveur par défaut
Host *
AddKeysToAgent yes
IdentitiesOnly yes
# Bastion avec ProxyJump
Host internal-*
ProxyJump bastion.example.com
User admin
Host bastion.example.com
User jump
IdentityFile ~/.ssh/id_ed25519_bastion
# Serveur spécifique
Host prod-db
HostName 10.0.1.50
User postgres
IdentityFile ~/.ssh/id_ed25519_prod
Port 2222
Permissions Correctes
# Répertoire .ssh
chmod 700 ~/.ssh
# Clé privée (CRITIQUE)
chmod 600 ~/.ssh/id_ed25519
# Clé publique
chmod 644 ~/.ssh/id_ed25519.pub
# authorized_keys
chmod 600 ~/.ssh/authorized_keys
# config
chmod 600 ~/.ssh/config
Erreur courante
SSH refuse de fonctionner si les permissions sont trop permissives.
Rotation des Clés
# 1. Générer nouvelle clé
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_new -C "user@domain.com $(date +%Y)"
# 2. Déployer sur tous les serveurs
ssh-copy-id -i ~/.ssh/id_ed25519_new.pub user@server1
ssh-copy-id -i ~/.ssh/id_ed25519_new.pub user@server2
# 3. Tester la nouvelle clé
ssh -i ~/.ssh/id_ed25519_new user@server1
# 4. Supprimer l'ancienne clé des serveurs
ssh user@server1 "sed -i '/OLD_KEY_FINGERPRINT/d' ~/.ssh/authorized_keys"
# 5. Remplacer localement
mv ~/.ssh/id_ed25519 ~/.ssh/id_ed25519_old
mv ~/.ssh/id_ed25519_new ~/.ssh/id_ed25519
Dépannage
Permission denied (publickey)
# Vérifier que la clé est chargée
ssh-add -l
# Tester avec verbose
ssh -vvv user@server
# Vérifier les permissions côté serveur
ssh user@server "ls -la ~/.ssh/"
Causes courantes
| Erreur | Cause | Solution |
|---|---|---|
Permission denied |
Clé pas dans authorized_keys | ssh-copy-id |
Bad permissions |
chmod incorrect | chmod 600 ~/.ssh/id_* |
Agent refused |
Agent pas démarré | eval $(ssh-agent) |
Host key changed |
Serveur réinstallé | ssh-keygen -R server |
Référence Rapide
# === GÉNÉRATION ===
ssh-keygen -t ed25519 -C "comment" # Générer Ed25519
ssh-keygen -t rsa -b 4096 -C "comment" # Générer RSA
# === DÉPLOIEMENT ===
ssh-copy-id -i ~/.ssh/key.pub user@server # Copier clé publique
cat ~/.ssh/key.pub # Afficher clé publique
# === AGENT ===
eval "$(ssh-agent -s)" # Démarrer agent
ssh-add ~/.ssh/id_ed25519 # Ajouter clé
ssh-add -l # Lister clés
# === PERMISSIONS ===
chmod 700 ~/.ssh # Répertoire
chmod 600 ~/.ssh/id_* # Clés privées
chmod 600 ~/.ssh/authorized_keys # Clés autorisées
# === DEBUG ===
ssh -vvv user@server # Mode verbose
ssh-keygen -lf ~/.ssh/id_ed25519.pub # Fingerprint
Voir Aussi
- SSH Tunnels - Port forwarding et tunnels
- SSH Hardening - Sécurisation serveur SSH
- Cheatsheet SSH - Référence rapide complète