Introduction
SSH (Secure Shell) est le protocole standard pour administrer des serveurs Linux a distance. Ce tutoriel couvre la generation de clés, la configuration client et serveur, le tunneling et les bonnes pratiques de sécurité.
Generer une paire de clés SSH
L'algorithme recommande aujourd'hui est Ed25519, plus rapide et plus sur que RSA.
ssh-keygen -t ed25519 -C "[email protected]"La commande créé deux fichiers dans ~/.ssh/ :
| Fichier | Role |
|---|---|
id_ed25519 | Cle privee -- ne jamais la partager |
id_ed25519.pub | Cle publique -- a copier sur les serveurs |
Pour protégér votre clé avec une passphrase forte, repondez a l'invite lors de la generation.
Copier la clé publique sur un serveur
ssh-copy-id -i ~/.ssh/id_ed25519.pub utilisateur@serveurCette commande ajoute votre clé publique dans le fichier ~/.ssh/authorized_keys du serveur. Vous pouvez ensuite vous connecter sans mot de passe :
ssh utilisateur@serveurLe fichier de configuration client ~/.ssh/config
Ce fichier permet de définir des alias et des options par hôte pour simplifier vos connexions.
# ~/.ssh/config
Host prod
HostName 192.168.1.100
User admin
Port 2222
IdentityFile ~/.ssh/id_ed25519
Host staging
HostName staging.exemple.fr
User deploy
IdentityFile ~/.ssh/id_ed25519
ForwardAgent yesAvec cette configuration, il suffit de taper :
ssh prod
ssh stagingL'agent SSH
L'agent SSH garde vos clés deverrouillees en mémoire pour eviter de rétaper la passphrase a chaque connexion.
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519Pour lister les clés chargees :
ssh-add -lPour supprimer toutes les clés de l'agent :
ssh-add -DTunneling et redirection de ports
Redirection locale (Local Port Forwarding)
Acceder a un service distant (par exemple une base de données sur le port 5432) via un tunnel local :
ssh -L 5432:localhost:5432 utilisateur@serveurVous pouvez alors vous connecter a localhost:5432 sur votre machine locale et le trafic sera redirige vers le serveur distant.
Redirection distante (Remote Port Forwarding)
Exposer un service local (port 3000) sur le serveur distant :
ssh -R 8080:localhost:3000 utilisateur@serveurTunnel SOCKS dynamique
Creer un proxy SOCKS local pour faire transiter tout le trafic via le serveur :
ssh -D 1080 utilisateur@serveurSecuriser le serveur SSH (sshd_config)
Editez le fichier /etc/ssh/sshd_config pour durcir la configuration du serveur.
sudo nano /etc/ssh/sshd_configParametrès recommandes
Port 2222 # changer le port par défaut
PermitRootLogin no # interdire la connexion root
PasswordAuthentication no # désactiver l'authentification par mot de passe
PubkeyAuthentication yes # activer l'authentification par cle
MaxAuthTries 3 # limiter les tentatives
AllowUsers admin deploy # restreindre les utilisateurs autorises
ClientAliveInterval 300 # deconnexion après 5 min d'inactivité
ClientAliveCountMax 2
Protocol 2 # forcer le protocole 2Apres modification, redemarrez le service :
sudo systemctl restart sshdVerifier la configuration avant de redémarrer
sudo sshd -tCette commande valide la syntaxe du fichier de configuration. Si elle ne renvoie aucune erreur, le redémarrage est sans risque.
Gestion des clés sur le serveur
Lister les clés autorisees
cat ~/.ssh/authorized_keysRevoquer une cle
Editez le fichier authorized_keys et supprimez la ligne correspondant a la clé a revoquer :
nano ~/.ssh/authorized_keysPermissions requises
Les permissions doivent être strictes, sinon SSH refusera la connexion :
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pubConclusion
SSH est un outil indispensable pour tout administrateur Linux. Une configuration correcte -- clés Ed25519, agent SSH, fichier de configuration client et serveur durci -- vous permettra de travailler efficacement et en toute sécurité sur vos machines distantes.