Clés SSH : génération, configuration et gestion multi-comptes
Outils de développement赵婉清
Clés SSH : une méthode d'authentification plus sûre que les mots de passe
| Comparaison | Mot de passe | Clé SSH |
|---|---|---|
| Méthode d'authentification | Facteur de connaissance (ce que vous savez) | Facteur de possession (ce que vous possédez) |
| Force brute | Possible | Pratiquement impossible |
| Risque de hameçonnage | Élevé | Faible (la clé privée ne quitte jamais la machine locale) |
| Fuite serveur | Mots de passe en clair/hachages vulnérables | Seule la clé publique est stockée, la clé privée n'est pas dérivable |
| Commodité | Saisir à chaque fois | Configuration unique, authentification automatique |
1. Générer une paire de clés
Ed25519 (recommandé)
ssh-keygen -t ed25519 -C "your@email.com"
| Paramètre | Description |
|---|---|
-t ed25519 |
Type d'algorithme (Ed25519, le plus sûr et le plus rapide) |
-C |
Commentaire (généralement l'email pour l'identification) |
RSA (alternative de compatibilité)
ssh-keygen -t rsa -b 4096 -C "your@email.com"
| Algorithme | Longueur de clé | Sécurité | Performance | Recommandation |
|---|---|---|---|---|
| Ed25519 | 256 bit | Maximale | Le plus rapide | ✅ |
| ECDSA P256 | 256 bit | Élevée | Rapide | Optionnel |
| RSA 4096 | 4096 bit | Élevée | Lent | Alternative de compatibilité |
| RSA 2048 | 2048 bit | Moyenne | Lent | ❌ Non recommandé |
Processus de génération
$ ssh-keygen -t ed25519 -C "dev@example.com"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase): ****
Enter same passphrase again: ****
Your identification has been saved in /home/user/.ssh/id_ed25519
Your public key has been saved in /home/user/.ssh/id_ed25519.pub
Il est fortement recommandé de définir une passphrase : même si la clé privée fuite, une passphrase empêche son utilisation directe.
2. Déployer la clé publique
GitHub / GitLab
# Copier la clé publique
cat ~/.ssh/id_ed25519.pub | clip
# GitHub → Settings → SSH and GPG keys → New SSH key
# Coller le contenu de la clé publique
Serveur
# Méthode 1 : ssh-copy-id
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server.com
# Méthode 2 : Ajout manuel
cat ~/.ssh/id_ed25519.pub | ssh user@server.com 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys'
Vérifier la connexion
ssh -T git@github.com
# Hi username! You've successfully authenticated...
ssh user@server.com
# Connexion directe, sans mot de passe
3. Configuration multi-comptes
Scénario : GitHub professionnel + GitHub personnel
# Générer deux paires de clés
ssh-keygen -t ed25519 -C "work@company.com" -f ~/.ssh/id_work
ssh-keygen -t ed25519 -C "personal@gmail.com" -f ~/.ssh/id_personal
SSH Config
# ~/.ssh/config
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_work
IdentitiesOnly yes
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_personal
IdentitiesOnly yes
Utilisation avec Git
# Dépôt professionnel
git clone git@github-work:company/project.git
# Dépôt personnel
git clone git@github-personal:username/project.git
Configuration multi-plateforme
# ~/.ssh/config
Host github.com
User git
IdentityFile ~/.ssh/id_github
Host gitlab.com
User git
IdentityFile ~/.ssh/id_gitlab
Host gitee.com
User git
IdentityFile ~/.ssh/id_gitee
Host dev.azure.com
User git
IdentityFile ~/.ssh/id_azure
4. Gestion de l'Agent SSH
Démarrer l'Agent
eval "$(ssh-agent -s)"
Ajouter une clé
ssh-add ~/.ssh/id_ed25519
# Enter passphrase: ****
# Voir les clés ajoutées
ssh-add -l
# 256 SHA256:xxx... dev@example.com (ED25519)
Démarrage automatique (bashrc)
# ~/.bashrc ou ~/.zshrc
if [ -z "$SSH_AUTH_SOCK" ]; then
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519 2>/dev/null
fi
Persistance avec keychain
# macOS : utiliser Keychain pour stocker la passphrase
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
# Linux : utiliser keychain
eval "$(keychain --eval id_ed25519)"
5. Configuration du serveur de rebond
Scénario : Local → Serveur de rebond → Serveur de production
# ~/.ssh/config
Host jumpbox
HostName jump.example.com
User jump-user
IdentityFile ~/.ssh/id_jump
Host production
HostName 10.0.1.100
User deploy
IdentityFile ~/.ssh/id_prod
ProxyJump jumpbox
# Connexion directe au serveur de production (passe automatiquement par le serveur de rebond)
ssh production
Transfert d'Agent
Host jumpbox
HostName jump.example.com
ForwardAgent yes
Avertissement de sécurité : N'activez le transfert d'Agent que si vous faites confiance au serveur de rebond.
6. Renforcement de la sécurité
sshd_config côté serveur
# /etc/ssh/sshd_config
PermitRootLogin no # Interdire la connexion root
PasswordAuthentication no # Interdire la connexion par mot de passe
PubkeyAuthentication yes # Autoriser uniquement la connexion par clé
AuthorizedKeysFile .ssh/authorized_keys
MaxAuthTries 3 # Nombre maximum de tentatives
LoginGraceTime 30 # Délai de connexion de 30 secondes
AllowUsers deploy admin # Liste blanche des utilisateurs
Permissions des clés
# La clé privée doit être 600
chmod 600 ~/.ssh/id_ed25519
# Le répertoire .ssh doit être 700
chmod 700 ~/.ssh
# authorized_keys doit être 600
chmod 600 ~/.ssh/authorized_keys
Rotation des clés
# 1. Générer une nouvelle clé
ssh-keygen -t ed25519 -C "dev@example.com" -f ~/.ssh/id_ed25519_new
# 2. Déployer la nouvelle clé publique sur tous les serveurs/platformes Git
ssh-copy-id -i ~/.ssh/id_ed25519_new.pub user@server
# 3. Vérifier que la nouvelle clé fonctionne
ssh -i ~/.ssh/id_ed25519_new user@server
# 4. Supprimer l'ancienne clé publique
# Éditer ~/.ssh/authorized_keys sur le serveur, supprimer la ligne de l'ancienne clé
# 5. Supprimer l'ancienne clé
rm ~/.ssh/id_ed25519_old
7. Résolution des problèmes courants
| Problème | Cause | Solution |
|---|---|---|
Permission denied |
Clé publique non déployée | ssh-copy-id |
Too many authentication failures |
Trop de clés dans l'Agent | IdentitiesOnly yes |
Are you sure you want to continue connecting |
Première connexion | StrictHostKeyChecking=accept-new |
| Connexion lente | Requête DNS inversée | UseDNS no (côté serveur) |
| Clé non fonctionnelle | Permissions incorrectes | chmod 600 pour la clé privée |
Mode débogage
ssh -vvv user@server.com
# Sortie détaillée du processus de connexion, localiser la cause de l'échec d'authentification
#SSH#密钥#Git#免密登录#安全