Definition
SSH (Secure Shell) est un protocole reseau cryptographique qui permet d'acceder a une machine distante de maniere securisee. Il remplace les anciens protocoles non chiffres comme Telnet et rlogin.
SSH est utilise quotidiennement par les developpeurs et administrateurs systeme pour gerer des serveurs, transferer des fichiers et creer des tunnels securises.
Cas d'usage principaux
- Administration de serveurs : se connecter a un VPS ou un serveur cloud
- Deploiement : pousser du code en production via SCP ou rsync
- Tunnels : rediriger des ports pour acceder a des services internes
- Git : authentification pour push/pull sur GitHub, GitLab
Authentification
Par mot de passe
Simple mais moins securise. Vulnerable aux attaques brute force.
Par cle publique/privee (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 autorite de certification signe les cles 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
Securisation SSH
- Desactiver l'authentification par mot de passe (
PasswordAuthentication no) - Changer le port par defaut (22 → 2222+)
- Utiliser Fail2ban pour bloquer les tentatives brute force
- Utiliser des cles Ed25519 (plus securises que RSA)
- Configurer
AllowUserspour limiter les utilisateurs autorises