1. Pourquoi passer aux clés SSH ?

L'authentification par mot de passe a deux problèmes majeurs : les mots de passe peuvent être devinés par brute-force, et vous devez le retaper à chaque connexion. Les clés SSH règlent les deux problèmes à la fois.

Le principe : vous générez une paire de clés mathématiquement liées.

  • La clé privée reste sur votre ordinateur, ne se partage jamais
  • La clé publique est copiée sur les serveurs auxquels vous voulez accéder

Quand vous vous connectez, le serveur vérifie que votre clé privée correspond à la clé publique enregistrée - sans que le mot de passe ne transite sur le réseau. Même si quelqu'un intercepte la connexion, il ne peut rien faire sans votre clé privée.

2. Générer une paire de clés

L'algorithme ED25519 est le choix recommandé en 2025 - il est plus court, plus rapide et plus sûr que le vieux RSA 2048.

Sur votre ordinateur (pas sur le VPS) :

bash
ssh-keygen -t ed25519 -C "votre@email.com" -f ~/.ssh/croustycloud_ed25519

Détail des options :

  • -t ed25519 : algorithme de chiffrement
  • -C "votre@email.com" : commentaire pour identifier la clé (utile quand vous en avez plusieurs)
  • -f ~/.ssh/croustycloud_ed25519 : nom du fichier (sans suffixe = clé privée, avec .pub = clé publique)

Le programme vous demande une passphrase - c'est le mot de passe qui protège votre clé privée. Choisissez-en un solide.

Deux fichiers sont créés :

bash
~/.ssh/croustycloud_ed25519 # Clé privée - NE JAMAIS PARTAGER ~/.ssh/croustycloud_ed25519.pub # Clé publique - à copier sur les serveurs
🚨

La clé privée ne quitte jamais votre machine. Si quelqu'un obtient votre clé privée sans passphrase, il accède à tous vos serveurs instantanément. Faites-en une sauvegarde dans un endroit sécurisé (gestionnaire de mots de passe, support chiffré).

3. Déployer la clé sur votre VPS

ssh-copy-id copie automatiquement votre clé publique dans le bon fichier sur le serveur :

bash
ssh-copy-id -i ~/.ssh/croustycloud_ed25519.pub -p 2222 votre-user@VOTRE-IP-VPS

En coulisses, cette commande ajoute votre clé dans ~/.ssh/authorized_keys sur le serveur. À partir de maintenant, SSH utilise votre clé pour s'authentifier.

Si vous êtes sous Windows et que ssh-copy-id n'est pas disponible, faites-le manuellement :

bash
# Affichez le contenu de votre clé publique cat ~/.ssh/croustycloud_ed25519.pub # Copiez le résultat, puis connectez-vous au serveur et collez-le : mkdir -p ~/.ssh && chmod 700 ~/.ssh echo "VOTRE_CLE_PUBLIQUE_COLLÉE_ICI" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
⚠️

Testez la connexion par clé dans un nouveau terminal avant de désactiver l'authentification par mot de passe. Si quelque chose ne va pas, vous pouvez encore corriger le problème.

Une fois la connexion par clé validée, désactivez les mots de passe dans /etc/ssh/sshd_config :

bash
PasswordAuthentication no

4. Le fichier de config SSH client

Plutôt que de taper ssh -p 2222 -i ~/.ssh/croustycloud_ed25519 mon-user@92.168.1.45 à chaque fois, le fichier ~/.ssh/config vous permet de créer des alias.

Créez ou éditez ce fichier sur votre ordinateur :

bash
nano ~/.ssh/config
bash
Host monvps HostName VOTRE-IP-VPS User votre-user Port 2222 IdentityFile ~/.ssh/croustycloud_ed25519 ServerAliveInterval 60 ServerAliveCountMax 3

Signification des options :

  • Host monvps : l'alias que vous utilisez pour vous connecter
  • HostName : l'IP ou le domaine réel du serveur
  • User : votre nom d'utilisateur sur le serveur
  • Port : le port SSH (si différent de 22)
  • IdentityFile : quelle clé privée utiliser
  • ServerAliveInterval 60 : envoie un ping toutes les 60 secondes pour garder la connexion active

Maintenant, connectez-vous simplement avec :

bash
ssh monvps

Vous pouvez ajouter autant d'hôtes que vous voulez dans ce fichier.

5. L'agent SSH : ne taper la passphrase qu'une seule fois

L'agent SSH mémorise votre clé déchiffrée en mémoire RAM pour la durée de votre session. Vous entrez la passphrase une seule fois au démarrage, et toutes vos connexions SSH suivantes l'utilisent automatiquement.

bash
# Démarrer l'agent (si pas déjà actif) eval $(ssh-agent -s) # Charger votre clé (vous entrez la passphrase ici) ssh-add ~/.ssh/croustycloud_ed25519 # Vérifier les clés chargées ssh-add -l
💡

Sur macOS, ajoutez ces lignes dans ~/.ssh/config pour que le Keychain macOS retienne automatiquement votre passphrase entre les redémarrages :

bash
Host * AddKeysToAgent yes UseKeychain yes

6. Les tunnels SSH (port forwarding)

Les tunnels SSH permettent de faire passer du trafic d'un port local à un port distant via la connexion SSH. Utile pour accéder à des services qui ne sont pas exposés sur internet (base de données, panel d'administration...).

Tunnel local (le plus courant)

Scénario : votre base de données MySQL tourne sur le VPS sur le port 3306, mais elle n'est pas accessible depuis l'extérieur (c'est une bonne pratique). Vous voulez vous y connecter depuis votre ordinateur.

bash
ssh -L 3307:localhost:3306 monvps -N

Traduction : "redirige mon port local 3307 vers le port 3306 du VPS, via SSH".

Ouvrez ensuite votre client MySQL en vous connectant à localhost:3307 - il arrivera en réalité sur votre base de données distante.

  • -L 3307:localhost:3306 : port local → destination depuis le serveur
  • -N : ouvre le tunnel sans démarrer un shell (laisse le terminal occupé - Ctrl+C pour fermer)

Tunnel dynamique (proxy SOCKS)

Crée un proxy qui fait passer tout votre trafic navigateur par le VPS :

bash
ssh -D 1080 monvps -N

Configurez ensuite Firefox ou Chrome avec un proxy SOCKS5 sur 127.0.0.1:1080. Votre trafic sortira de l'IP du VPS.

7. Bonnes pratiques à retenir

  • Toujours utiliser des clés plutôt que des mots de passe
  • Changer le port SSH par défaut (22 → autre)
  • Désactiver la connexion root directe
  • Protéger la clé privée avec une passphrase forte
  • Ne jamais partager ou copier sa clé privée
  • Faire une rotation des clés tous les ans

Vous maîtrisez maintenant SSH. La prochaine étape logique : installer Fail2Ban pour bloquer automatiquement les tentatives d'intrusion, et configurer Nginx comme reverse proxy pour exposer vos applications en HTTPS.