Introduction
SSH (Secure Shell) est le protocole standard pour accéder à distance à un serveur de manière sécurisée, remplaçant les protocoles obsolètes comme Telnet. En 2026, avec la multiplication des attaques par force brute et les vulnérabilités zero-day, maîtriser SSH n'est plus optionnel : c'est essentiel pour tout développeur, admin sys ou DevOps. Ce tutoriel beginner vous guide pas à pas, de l'installation à la configuration avancée, avec des exemples concrets sous Linux (Ubuntu/Debian), macOS et Windows (via WSL ou OpenSSH). Vous apprendrez à générer des clés ED25519 (plus sécurisées que RSA), à désactiver les mots de passe, et à implémenter le tunneling pour des connexions proxy. À la fin, vous configurerez un serveur SSH impénétrable, prêt pour la prod. Temps estimé : 20 minutes. Pourquoi c'est crucial ? 80% des breaches serveur passent par des creds SSH faibles (source : Verizon DBIR 2025). Bookmarkez ce guide : il est votre référence actionnable.
Prérequis
- Un ordinateur client : Linux (Ubuntu 24.04+), macOS Ventura+, ou Windows 11 avec WSL2.
- Un serveur distant : VPS Ubuntu 24.04 (ex: DigitalOcean droplet à 6$/mois) avec accès root/mot de passe initial.
- Terminal : GNOME Terminal, iTerm2 ou PowerShell.
- Connaissances basiques de ligne de commande (cd, ls).
- Firewall autorisant le port 22 (ufw allow 22).
Installer OpenSSH client et serveur
# Sur le client (Linux/macOS)
sudo apt update && sudo apt install openssh-client -y
# Sur le serveur (Ubuntu/Debian)
sudo apt update && sudo apt install openssh-server -y
sudo systemctl enable ssh
sudo systemctl start ssh
# Vérifier le statut
sudo systemctl status ssh
# Sur Windows (via PowerShell en admin)
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'Ces commandes installent et activent OpenSSH. Sur serveur, systemctl enable assure le démarrage auto au boot. Vérifiez avec status : vous devez voir 'active (running)'. Piège : sur Windows, exécutez en admin ; sinon, la feature échoue silencieusement.
Vérifier l'installation et première connexion
Testez la connexion basique avec mot de passe : ssh user@ip_serveur. Si cela fonctionne, vous êtes prêt pour les clés. Imaginez SSH comme une porte blindée : les mots de passe sont la serrure basique, les clés sont la biométrie.
Générer une paire de clés ED25519
cd ~/.ssh
ssh-keygen -t ed25519 -C "votre-email@example.com" -f id_ed25519
# Passphrase recommandée (optionnelle mais sécurisée)
# Entrez une passphrase forte (ex: 20+ chars avec chiffres/symboles)
# Lister les clés générées
ls -la
# Contenu de la clé publique (à copier)
cat ~/.ssh/id_ed25519.pubED25519 est plus rapide et résistant aux attaques quantiques que RSA. La -C ajoute un commentaire pour identification. Piège : sans passphrase, une clé volée compromet tout ; utilisez un gestionnaire comme ssh-agent pour l'éviter au quotidien.
Copier la clé publique sur le serveur
Utilisez ssh-copy-id pour automatiser : il crée ~/.ssh/authorized_keys avec les bonnes permissions (600/644).
Copier la clé et tester connexion sans mot de passe
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@ip_serveur
# Tester la connexion
ssh -i ~/.ssh/id_ed25519 user@ip_serveur
# Sur le serveur, vérifier permissions
echo "Permissions authorized_keys :"
ls -la ~/.ssh/authorized_keys
# Corriger si besoin
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keysssh-copy-id append la clé publique au fichier authorized_keys. Testez : vous devriez vous connecter sans prompt mot de passe. Piège : permissions trop ouvertes (777) bloquent SSH par sécurité ; corrigez toujours avec chmod.
Configurer le serveur SSH pour plus de sécurité
/etc/ssh/sshd_config contrôle le daemon. Éditez-le avec sudo nano, puis redémarrez : sudo systemctl restart ssh.
Configuration serveur sshd_config sécurisée
Port 2222
Protocol 2
HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_rsa_key
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM no
X11Forwarding no
PrintMotd no
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
Match User root
PermitRootLogin no
LogLevel VERBOSECe config : change port (anti-scan), désactive mots de passe/root, force clés. Match User root bloque root même en clé. Après édition, testez connexion avant restart ; sinon, vous vous verrouillez dehors.
Configurer le client pour des connexions aliasées
Créez ~/.ssh/config pour des raccourcis : ssh prod au lieu de ssh -p 2222 -i key user@ip.
Configuration client ~/.ssh/config
Host prod
HostName 192.0.2.1
User ubuntu
Port 2222
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
Compression yes
Host dev
HostName dev.example.com
User devuser
Port 22
IdentityFile ~/.ssh/id_ed25519
ForwardAgent yes
Host *
AddKeysToAgent yes
UseKeychain yes # macOS
ServerAliveInterval 60Les blocs Host simplifient les connexions récurrentes. IdentitiesOnly yes évite d'essayer toutes les clés (ralentit). ServerAliveInterval garde la session vivante. Permissions : chmod 600 ~/.ssh/config.
Exemple de tunneling SSH (port forwarding)
# Tunneling local : expose port 8080 serveur sur localhost:3000 client
ssh -L 3000:localhost:8080 prod
# Tunneling distant : expose localhost:3000 client sur serveur:8080
ssh -R 8080:localhost:3000 prod
# Avec compression pour connexions lentes
ssh -C -L 3000:localhost:8080 -N prod
# Fermer tunnel proprement : Ctrl+C-L forward local (accès DB distante), -R distant (exposer service local). -N no command, juste tunnel. Utile pour debugger via localhost:3000. Piège : oubliez -N et le shell bloque.
Script bash pour connexion automatisée
#!/bin/bash
SERVER=$1
if [ -z "$SERVER" ]; then
echo "Usage: ./connect.sh <prod|dev>"
exit 1
fi
ssh-add ~/.ssh/id_ed25519 > /dev/null 2>&1
ssh "$SERVER" -o ConnectTimeout=10 -o StrictHostKeyChecking=accept-new
# Fonctionnalités :
# - Ajoute clé à agent
# - Timeout 10s
# - Accepte nouvelle clé host autoCe script rend les connexions one-liner : ./connect.sh prod. ssh-add charge la clé en agent. StrictHostKeyChecking=accept-new gère les nouveaux serveurs sans manual MITM check. Rendez exécutable : chmod +x connect.sh.
Bonnes pratiques
- Changez toujours le port par défaut (22) pour réduire les scans automatisés (millions/jour).
- Utilisez ED25519 ou ECDSA, évitez RSA < 4096 bits.
- Fail2ban : installez pour bannir IPs après 3 fails (
sudo apt install fail2ban). - Audit logs :
grep 'Failed password' /var/log/auth.logquotidiennement. - 2FA : via Google Authenticator avec
google-authenticatoretChallengeResponseAuthentication yes.
Erreurs courantes à éviter
- Permissions authorized_keys 644+ : SSH refuse avec 'permissions too open'. Fix :
chmod 600. - Oubli de restart ssh après config : changements ignorés. Toujours
systemctl restart ssh. - Clés sans passphrase sur laptop : vol = compromission. Utilisez
ssh-agent+ PIN. - Root login activé : 99% des hacks. Forcez
sudoaprès login user non-root.
Pour aller plus loin
- Documentation officielle : man ssh_config(5).
- Outils avancés : Mosh (sur SSH pour mobilité), Teleport (SSH zero-trust).
- Formations : Découvrez nos formations DevOps et sécurité chez Learni pour maîtriser Kubernetes avec SSH intégré.
- Projet pratique : Configurez un cluster Raspberry Pi avec SSH keys swarm.