SSH : configuration et sécurisation
SSH est l'outil quotidien de l'administrateur. Clés Ed25519, fichier de configuration client, rebonds, tunnels et réglages serveur essentiels : un guide pratique pour l'utiliser efficacement et proprement.
SSH (Secure Shell) permet d'administrer des systèmes à distance au travers d'un canal chiffré et authentifié. Défini par les RFC 4251 à 4254, il remplace Telnet, rlogin et FTP pour l'administration. L'implémentation la plus répandue est OpenSSH, présente sur les distributions Linux, macOS et intégrée à Windows 10, Windows 11 et Windows Server depuis 2019.
Objectif : configurer un serveur et un client SSH, utiliser l'authentification par clé, les rebonds et les tunnels. Les aspects de gouvernance (bastion, MFA, certificats SSH, audit) sont traités dans Durcissement SSH et gestion des accès administratifs.
Comment SSH protège la connexion
Une session SSH se déroule en trois phases :
- Établissement du transport : négociation des algorithmes, échange de clés (par exemple curve25519 ou, sur les versions récentes d'OpenSSH, un échange hybride résistant aux ordinateurs quantiques), puis chiffrement de la suite des échanges.
- Authentification du serveur : le serveur présente sa clé d'hôte. Le client la compare à son fichier
~/.ssh/known_hosts. Lors de la première connexion, il demande de confirmer l'empreinte. - Authentification de l'utilisateur : par clé publique, mot de passe, ou méthodes complémentaires.
Ne validez jamais une empreinte sans la vérifier. Un avertissement « REMOTE HOST IDENTIFICATION HAS CHANGED » peut signaler une réinstallation du serveur… ou une interception. Obtenez l'empreinte par un canal fiable :
# Sur le serveur, depuis la console
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
Installer le serveur
sudo apt install openssh-server # Debian / Ubuntu
sudo dnf install openssh-server # RHEL et dérivés
sudo systemctl enable --now ssh # le service s'appelle "sshd" sur RHEL
# Windows Server 2019 et versions ultérieures
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
Authentification par clé
Générer une paire de clés
ssh-keygen -t ed25519 -C "admin@poste-admin01"
- La clé Ed25519 est recommandée : courte, rapide et robuste. Si un équipement ancien ne la prend pas en charge, utilisez RSA avec au moins 3 072 bits (
-t rsa -b 4096). - Protégez la clé privée par une phrase de passe et utilisez un agent (
ssh-agent) pour ne la saisir qu'une fois par session. - La clé privée (
~/.ssh/id_ed25519) ne quitte jamais votre poste ; seule la clé publique (.pub) est copiée sur les serveurs.
Déployer la clé publique
ssh-copy-id -i ~/.ssh/id_ed25519.pub admin@srv-web01
À défaut, ajoutez le contenu du fichier .pub dans ~/.ssh/authorized_keys sur le serveur, avec des permissions strictes :
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
OpenSSH refuse d'utiliser un fichier authorized_keys aux permissions trop ouvertes : c'est une cause fréquente d'échec.
Sur Windows, les clés des comptes membres du groupe Administrateurs se placent dans C:\ProgramData\ssh\administrators_authorized_keys, avec des ACL restreintes.
Configuration du serveur : les réglages essentiels
Le fichier principal est /etc/ssh/sshd_config. Les distributions récentes chargent aussi les fichiers de /etc/ssh/sshd_config.d/, ce qui permet d'isoler vos réglages :
# /etc/ssh/sshd_config.d/50-foxency.conf — exemple
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
AllowGroups ssh-admins
MaxAuthTries 3
LoginGraceTime 30
X11Forwarding no
ClientAliveInterval 300
ClientAliveCountMax 2
Procédure sûre pour appliquer une modification :
sudo sshd -t # vérifier la syntaxe (aucune sortie = OK)
sudo systemctl reload ssh # ou sshd selon la distribution
Gardez votre session actuelle ouverte et testez une nouvelle connexion depuis un autre terminal avant de vous déconnecter. Si la configuration est incorrecte, la session existante vous permet de corriger.
Avant de désactiver l'authentification par mot de passe, vérifiez que la connexion par clé fonctionne pour tous les comptes d'administration.
Le fichier de configuration client
Le fichier ~/.ssh/config évite de retaper options et noms :
Host bastion
HostName bastion.exemple.fr
User admin
IdentityFile ~/.ssh/id_ed25519
Host srv-*
User admin
ProxyJump bastion
IdentityFile ~/.ssh/id_ed25519
Host srv-web01
HostName 10.10.20.80
Host *
ServerAliveInterval 60
HashKnownHosts yes
Il suffit ensuite de taper ssh srv-web01 : la connexion passe automatiquement par le bastion.
ProxyJump : rebondir proprement
ssh -J admin@bastion.exemple.fr admin@10.10.20.80
Avec ProxyJump, la clé privée reste sur votre poste : le bastion ne fait que relayer le flux chiffré. C'est préférable à l'agent forwarding (ssh -A), qui expose votre agent à tout administrateur du serveur intermédiaire.
Tunnels SSH
SSH peut transporter d'autres flux TCP de manière chiffrée.
# Redirection locale : accéder à une interface web interne via le bastion
ssh -L 8443:10.10.99.5:443 bastion
# puis ouvrir https://localhost:8443
# Redirection distante : exposer un port local sur le serveur distant
ssh -R 9000:localhost:3000 srv-dev01
# Proxy SOCKS dynamique
ssh -D 1080 bastion
Les tunnels sont pratiques mais peuvent contourner la politique de filtrage : sur les serveurs, limitez-les avec AllowTcpForwarding et PermitOpen, et documentez leur usage.
Transférer des fichiers
scp rapport.pdf srv-web01:/tmp/
sftp srv-web01
rsync -avz --progress ./site/ srv-web01:/var/www/site/
Depuis OpenSSH 9.0, scp utilise par défaut le protocole SFTP plutôt que l'ancien protocole SCP.
SSH sur les équipements réseau
Les routeurs et commutateurs gérés prennent en charge SSH, à activer à la place de Telnet. Sur Cisco IOS, il faut un nom d'hôte, un nom de domaine, une paire de clés RSA et des lignes VTY restreintes à SSH. Voir Configuration initiale d'un routeur Cisco.
Diagnostiquer une connexion SSH
ssh -v admin@srv-web01 # -vv ou -vvv pour plus de détails
sudo journalctl -u ssh -f # journaux côté serveur ("sshd" sur RHEL)
| Message | Cause probable |
|---|---|
Connection refused |
Service arrêté ou mauvais port |
Connection timed out |
Filtrage réseau ou hôte injoignable |
Permission denied (publickey) |
Clé non déployée, mauvais utilisateur, permissions de authorized_keys |
Host key verification failed |
Clé d'hôte modifiée : vérifier avant de supprimer l'ancienne entrée |
no matching key exchange method |
Équipement ancien aux algorithmes obsolètes |
Erreurs courantes
- Accepter une empreinte sans vérification.
- Clé privée sans phrase de passe copiée sur plusieurs machines.
- Recharger sshd sans tester la syntaxe ni garder une session de secours.
- Utiliser l'agent forwarding vers des serveurs partagés.
- Réactiver des algorithmes obsolètes globalement au lieu de limiter l'exception à l'hôte concerné dans
~/.ssh/config.
Conclusion
Des clés Ed25519 protégées par phrase de passe, un sshd_config minimal et vérifié, un ~/.ssh/config avec ProxyJump : ces trois éléments rendent SSH à la fois plus sûr et plus confortable. Pour aller plus loin dans la maîtrise des accès privilégiés, poursuivez avec Durcissement SSH et gestion des accès administratifs.


