Définition
SSH (Secure Shell) est un protocole réseau cryptographique qui permet d'accéder à une machine distante de manière sécurisée. Il remplace les anciens protocoles non chiffres comme Telnet et rlogin.
SSH est utilisé quotidiennement par les développeurs et administrateurs système pour gérer des serveurs, transférer des fichiers et créer des tunnels sécurisés.
Cas d'usage principaux
- Administration de serveurs : se connecter à un VPS ou un serveur cloud
- Déploiement : pousser du code en production via SCP ou rsync
- Tunnels : rediriger des ports pour accéder à des services internes
- Git : authentification pour push/pull sur GitHub, GitLab
Authentification
Par mot de passe
Simple mais moins securise. Vulnérable aux attaques brute force.
Par cle publique/privée (recommande)
# Generer une paire de cles (Ed25519, le plus moderne)
ssh-keygen -t ed25519 -C "mon@email.com"
# Copier la cle publique sur le serveur
ssh-copy-id user@serveur.com
# Se connecter (automatique, sans mot de passe)
ssh user@serveur.com
Par certificat SSH
Pour les grandes organisations : une autorité de certification signe les clés utilisateur.
Commandes essentielles
# Connexion basique
ssh user@serveur.com
# Avec une cle specifique
ssh -i ~/.ssh/ma_cle user@serveur.com
# Avec un port non standard
ssh -p 2222 user@serveur.com
# Copier un fichier vers le serveur
scp fichier.txt user@serveur.com:/home/user/
# Copier un dossier entier
scp -r mon-dossier/ user@serveur.com:/home/user/
# Synchroniser avec rsync (plus efficace que scp)
rsync -avz ./dist/ user@serveur.com:/var/www/monsite/
Tunnels SSH (Port Forwarding)
# Local forwarding : acceder a un service distant via un port local
# Acces a PostgreSQL (port 5432) du serveur via localhost:5433
ssh -L 5433:localhost:5432 user@serveur.com
# Remote forwarding : exposer un service local au serveur distant
ssh -R 8080:localhost:3000 user@serveur.com
# Dynamic forwarding (proxy SOCKS)
ssh -D 1080 user@serveur.com
Configuration SSH (~/.ssh/config)
Host prod
HostName 203.0.113.50
User deploy
IdentityFile ~/.ssh/id_prod
Port 22
Host staging
HostName 203.0.113.51
User deploy
IdentityFile ~/.ssh/id_staging
Ensuite : ssh prod au lieu de ssh -i ~/.ssh/id_prod deploy@203.0.113.50
Sécurisation SSH
- Désactiver l'authentification par mot de passe (
PasswordAuthentication no) - Changer le port par défaut (22 → 2222+)
- Utiliser Fail2ban pour bloquer les tentatives brute force
- Utiliser des clés Ed25519 (plus sécurisés que RSA)
- Configurer
AllowUserspour limiter les utilisateurs autorisés