Guide complet de configuration SSH sur Ubuntu : installation, renforcement de la sécurité, configuration avancée et dépannage

目次

1. Introduction

La configuration de SSH sur Ubuntu est essentielle pour la gestion des serveurs distants. SSH (Secure Shell) est un protocole qui fournit une communication chiffrée sécurisée, permettant aux utilisateurs d’accéder aux serveurs à distance, d’exécuter des commandes et de transférer des fichiers.

Cet article explique comment configurer SSH sur Ubuntu, des étapes d’installation de base aux mesures de sécurité avancées.

1.1 Pourquoi configurer SSH sur Ubuntu ?

1.1.1 Qu’est-ce que SSH ?

SSH (Secure Shell) est un protocole qui permet une communication sécurisée sur un réseau. Il est couramment utilisé pour se connecter à des serveurs distants, transférer des fichiers et créer des tunnels (redirection de ports). Contrairement à Telnet ou FTP traditionnels, SSH chiffre toute la communication, offrant une sécurité forte.

1.1.2 Quand SSH est nécessaire sur Ubuntu

Scénarios courants où SSH est utilisé pour gérer Ubuntu à distance incluent :

  • Administration de serveurs cloud : Les serveurs Linux sur AWS, GCP, Vultr, et autres sont généralement accessibles via SSH.
  • Opérations à distance dans des environnements LAN : Accès à des serveurs internes ou des machines de développement à distance.
  • Gestion d’appareils IoT : Contrôle de systèmes embarqués tels que Raspberry Pi à distance.

Par défaut, le serveur SSH est désactivé sur Ubuntu, il doit donc être installé et configuré manuellement pour activer l’accès SSH.

2. Configuration de base de SSH

Pour utiliser SSH sur Ubuntu, vous devez installer le serveur SSH (OpenSSH) et le configurer correctement. Cette section explique comment installer SSH, ajuster les paramètres de base, configurer le pare-feu et se connecter au serveur.

2.1 Installation et démarrage d’OpenSSH

2.1.1 Qu’est-ce qu’OpenSSH ?

OpenSSH (Open Secure Shell) est une implémentation open-source du protocole SSH. Il prend en charge les connexions distantes, les transferts de fichiers sécurisés (SCP et SFTP), et la redirection de ports.

2.1.2 Installation d’OpenSSH

Ubuntu n’inclut pas de serveur SSH par défaut, installez-le en utilisant la commande ci-dessous :

sudo apt update && sudo apt install -y openssh-server

Cela met à jour les listes de paquets et installe le serveur OpenSSH.

2.1.3 Démarrage de SSH et activation du démarrage automatique

Après l’installation, démarrez le serveur SSH et activez le démarrage automatique :

sudo systemctl enable --now ssh

L’option enable garantit que SSH démarre automatiquement au démarrage du système d’exploitation.

2.1.4 Vérification du statut de SSH

Vérifiez que SSH est en cours d’exécution :

systemctl status ssh

Si la sortie affiche active (running), SSH fonctionne normalement :

● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2025-02-28 12:00:00 UTC; 5min ago

S’il affiche inactive (dead) ou failed, démarrez SSH manuellement :

sudo systemctl start ssh

2.2 Configuration du pare-feu (UFW)

Ubuntu inclut un pare-feu simple appelé ufw (Uncomplicated Firewall). Vous devez autoriser les connexions SSH à travers celui-ci.

2.2.1 Vérification du statut d’UFW

sudo ufw status

Exemple de sortie (inactif) :

Status: inactive

Exemple de sortie (actif) :

Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere

2.2.2 Autorisation de SSH

sudo ufw allow ssh

Ou explicitement :

sudo ufw allow 22/tcp

2.2.3 Activation d’UFW

sudo ufw enable

2.2.4 Vérification des règles UFW

sudo ufw status verbose

Exemple :

Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)

2.3 Méthodes de connexion SSH de base

Une fois SSH en cours d’exécution, connectez-vous depuis une machine cliente.

2.3.1 Connexion depuis Linux/macOS

ssh username@server-ip-address

Exemple :

ssh user@192.168.1.100

Vous pourriez voir un avertissement de sécurité lors de la première connexion :

The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)?

Tapez yes pour continuer.

2.3.2 Connexion depuis Windows

Vous pouvez utiliser PowerShell ou PuTTY.

Utilisation de PowerShell (Windows 10+ inclut SSH) :

ssh username@server-ip-address

Utilisation de PuTTY :

  1. Téléchargez PuTTY depuis le site officiel
  2. Ouvrez PuTTY et saisissez l’IP du serveur dans Host Name (or IP address)
  3. Sélectionnez SSH comme type de connexion
  4. Cliquez sur Open et connectez‑vous

Conclusion

Cette section a couvert les bases de la configuration d’SSH sur Ubuntu :

  • Comment installer et démarrer OpenSSH
  • Comment autoriser les connexions SSH avec UFW
  • Comment se connecter depuis Linux/macOS et Windows

3. Renforcer la sécurité SSH

SSH est puissant, mais le laisser avec les paramètres par défaut augmente les risques de sécurité. Les attaquants tentent souvent des tentatives de connexion par force brute ou des analyses de ports. Renforcer la sécurité d’SSH est essentiel.

3.1 Désactiver la connexion root

La connexion root donne un contrôle complet du système et constitue une cible majeure pour les attaquants. La désactiver améliore la sécurité.

3.1.1 Étapes

  1. Modifiez le fichier de configuration SSH :
    sudo nano /etc/ssh/sshd_config
    
  1. Changez la ligne en :
    PermitRootLogin no
    
  1. Redémarrez SSH :
    sudo systemctl restart ssh
    
  1. Confirmez le changement :
    sudo grep PermitRootLogin /etc/ssh/sshd_config
    

Si la sortie est PermitRootLogin no, le paramètre est appliqué.

3.2 Désactiver l’authentification par mot de passe et utiliser l’authentification par clé

L’authentification par clé publique est plus sûre que les mots de passe et réduit les risques d’attaques par force brute.

3.2.1 Création de clés SSH

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa

Cela génère deux fichiers :

  • id_rsa (clé privée) — conservez‑la localement, ne la partagez jamais
  • id_rsa.pub (clé publique) — téléversez‑la sur le serveur

3.2.2 Téléversement de la clé publique

ssh-copy-id username@server-ip-address

3.2.3 Désactivation de l’authentification par mot de passe

sudo nano /etc/ssh/sshd_config

Modifiez :

PasswordAuthentication no

Redémarrez SSH :

sudo systemctl restart ssh

3.3 Autoriser l’accès SSH uniquement à des utilisateurs spécifiques

Pour renforcer la sécurité SSH, vous pouvez restreindre l’accès afin que seuls certains utilisateurs puissent se connecter.

3.3.1 Étapes de configuration

  1. Ouvrez le fichier de configuration SSH /etc/ssh/sshd_config :
    sudo nano /etc/ssh/sshd_config
    
  1. Ajoutez les utilisateurs autorisés à accéder via SSH :
    AllowUsers username1 username2
    
  1. Redémarrez SSH pour appliquer les paramètres :
    sudo systemctl restart ssh
    

3.4 Modifier le port SSH

Comme le port 22 est fréquemment ciblé par les attaquants, changer le port par défaut peut améliorer la sécurité.

3.4.1 Étapes de configuration

  1. Ouvrez le fichier de configuration SSH :
    sudo nano /etc/ssh/sshd_config
    
  1. Modifiez le paramètre de port, par exemple :
    Port 2200
    
  1. Redémarrez SSH :
    sudo systemctl restart ssh
    

3.4.2 Mise à jour des paramètres du pare‑feu

Si vous changez le port, mettez à jour UFW :

sudo ufw allow 2200/tcp

Vérifiez la nouvelle règle :

sudo ufw status

3.5 Prévenir les attaques par force brute avec Fail2Ban

Fail2Ban détecte les tentatives de connexion échouées et bloque l’IP attaquante pendant une durée spécifiée.

3.5.1 Installer Fail2Ban

sudo apt install fail2ban -y

3.5.2 Créer un fichier de configuration

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Ouvrez le fichier :

sudo nano /etc/fail2ban/jail.local

Modifiez les paramètres :

[sshd]
enabled = true
port = 2200
maxretry = 3
findtime = 600
bantime = 3600

3.5.3 Redémarrer Fail2Ban

sudo systemctl restart fail2ban

3.5.4 Vérifier la liste des bannissements

sudo fail2ban-client status sshd

Conclusion

Cette section a expliqué les méthodes pour renforcer la sécurité d’SSH :

  • Désactiver la connexion root
  • Désactiver l’authentification par mot de passe et activer l’authentification par clé
  • Restreindre l’accès SSH à des utilisateurs spécifiques
  • Changer le port SSH
  • Utiliser Fail2Ban pour bloquer les tentatives non autorisées

Mettre en œuvre ces paramètres aide à créer un environnement SSH sécurisé.

4. Configuration SSH avancée

Une fois la configuration SSH de base et le renforcement de la sécurité terminés, vous pouvez passer aux fonctionnalités avancées pour une flexibilité et une sécurité accrues. Cette section couvre la gestion de ssh.socket (Ubuntu 22.10+), les tunnels SSH, l’écoute sur plusieurs ports et le contrôle d’accès basé sur les IP.

4.1 Utilisation de ssh.socket sur Ubuntu 22.10+

Sur Ubuntu 22.10+, SSH peut être géré par ssh.socket au lieu de ssh.service. Cette activation basée sur les sockets démarre SSH uniquement lorsque c’est nécessaire, économisant ainsi les ressources système.

4.1.1 Vérifier le statut de ssh.socket

sudo systemctl status ssh.socket

Exemple de sortie (activé) :

● ssh.socket - OpenSSH Server Socket
   Loaded: loaded (/lib/systemd/system/ssh.socket; enabled; vendor preset: enabled)
   Active: active (listening) since Fri 2025-02-28 12:00:00 UTC

4.1.2 Activer ou désactiver ssh.socket

Activer le socket :

sudo systemctl enable --now ssh.socket

Revenir au ssh.service classique :

sudo systemctl disable --now ssh.socket
sudo systemctl enable --now ssh.service

4.2 Tunneling SSH (Redirection de ports)

Le tunneling SSH établit des canaux de communication sécurisés entre les systèmes locaux et distants.

4.2.1 Redirection de port locale

Utile pour se connecter en toute sécurité à des bases de données distantes ou à des services internes.

Exemple : Accéder à un serveur MySQL distant sur le port 3306

ssh -L 3306:localhost:3306 username@server-ip-address

4.2.2 Redirection de port inverse

Exposer des services locaux via un serveur distant.

Exemple : Publier un serveur web local sur le port distant 8080

ssh -R 8080:localhost:80 username@server-ip-address

4.2.3 Redirection de port dynamique (proxy SOCKS)

Utiliser SSH comme proxy SOCKS pour une navigation anonyme.

ssh -D 1080 username@server-ip-address

4.3 Écoute sur plusieurs ports

SSH peut écouter sur plusieurs ports pour plus de flexibilité dans différents environnements réseau.

4.3.1 Étapes de configuration

  1. Modifier /etc/ssh/sshd_config :
    sudo nano /etc/ssh/sshd_config
    
  1. Ajouter plusieurs lignes Port :
    Port 22
    Port 2200
    
  1. Redémarrer SSH :
    sudo systemctl restart ssh
    
  1. Autoriser le nouveau port avec UFW :
    sudo ufw allow 2200/tcp
    

4.4 Autoriser SSH uniquement depuis des adresses IP spécifiques

Restreindre l’accès SSH par adresse IP offre un contrôle de sécurité renforcé.

4.4.1 Configurer /etc/hosts.allow

sudo nano /etc/hosts.allow

Ajouter une adresse IP autorisée :

sshd: 192.168.1.100

4.4.2 Configurer /etc/hosts.deny

sudo nano /etc/hosts.deny

Refuser tous les autres :

sshd: ALL

Conclusion

Cette section a couvert les sujets de configuration SSH avancée :

  • Gestion de ssh.socket sous Ubuntu 22.10+
  • Utilisation des tunnels SSH (redirection de ports)
  • Écoute sur plusieurs ports SSH
  • Restriction de l’accès SSH à des adresses IP spécifiques

L’application de ces configurations améliore à la fois la sécurité et la convivialité.

5. Dépannage SSH

Même avec une configuration correcte, les connexions SSH peuvent parfois échouer. Cette section explique les problèmes SSH courants et leurs solutions.

5.1 Quand SSH ne peut pas se connecter

Si SSH renvoie Connection refused ou dépasse le délai, les causes possibles incluent des problèmes de service, une mauvaise configuration du port ou des restrictions du pare-feu.

5.1.1 Le service SSH n’est pas en cours d’exécution

sudo systemctl status ssh

Solution :

  • Si inactive ou failed, redémarrez SSH :
    sudo systemctl restart ssh
    
  • Activer le démarrage automatique :
    sudo systemctl enable ssh
    

5.1.2 Port SSH non ouvert

ssh -p 2200 username@server-ip-address

Vérifiez les ports ouverts :

sudo netstat -tulnp | grep ssh

Or:

ss -tulnp | grep ssh

5.1.3 Pare-feu (UFW) bloquant SSH

sudo ufw status

Autoriser SSH :

sudo ufw allow 22/tcp

Si vous utilisez un port personnalisé :

sudo ufw allow 2200/tcp

5.2 Erreurs d’authentification

5.2.1 Nom d’utilisateur ou mot de passe incorrect

ssh username@server-ip-address

5.2.2 Clé publique mal installée

cat ~/.ssh/authorized_keys

Vérifiez qu’elle correspond à la id_rsa.pub locale.

5.2.3 Permissions incorrectes sur le répertoire .ssh

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Assurez-vous également :

chmod 755 /home/username

5.3 Connexions SSH instables ou déconnexions inattendues

5.3.1 Ajuster ClientAliveInterval

ClientAliveInterval 60
ClientAliveCountMax 3
sudo systemctl restart ssh

5.3.2 Ajuster les paramètres du client local

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

5.4 Visualisation des journaux SSH

5.4.1 Voir les journaux en temps réel

sudo journalctl -u ssh -f

5.4.2 Voir les journaux passés

sudo cat /var/log/auth.log | grep ssh
sudo grep "Failed password" /var/log/auth.log

Conclusion

Cette section a expliqué les problèmes SSH courants et comment les résoudre :

  • Vérifier si le service SSH est en cours d’exécution
  • Vérifier les ports ouverts
  • Vérifier les paramètres du pare-feu
  • Assurer une authentification par clé correcte
  • Corriger les problèmes de délai d’attente et de déconnexion
  • Analyser les journaux SSH

La plupart des problèmes SSH proviennent d’une mauvaise configuration ou de contraintes réseau. Utilisez ces étapes de dépannage pour résoudre les problèmes efficacement.

6. FAQ (Foire aux questions)

Cette section répond aux questions courantes liées à l’utilisation et à la configuration de SSH.

6.1 Comment résoudre les problèmes de délai d’attente SSH ?

6.1.1 Paramètres côté serveur

ClientAliveInterval 60
ClientAliveCountMax 3
sudo systemctl restart ssh

6.1.2 Paramètres côté client

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

6.2 Que faire si vous avez oublié votre mot de passe SSH ?

6.2.1 Si vous avez un accès physique

  1. Démarrez en mode mono-utilisateur (sélectionnez le mode de récupération depuis GRUB)
  2. Réinitialisez le mot de passe :
    passwd username
    
  1. Redémarrez le système

6.2.2 Si l’accès physique n’est pas possible (VPS cloud)

  • Utilisez la console VPS fournie par le service d’hébergement
  • Utilisez l’authentification par clé publique

6.3 Comment utiliser SSH sous Windows ?

6.3.1 Utilisation de PowerShell

ssh username@server-ip-address

6.3.2 Utilisation de PuTTY

  1. Téléchargez et installez PuTTY
  2. Saisissez l’adresse IP du serveur dans Host Name
  3. Sélectionnez SSH comme type de connexion
  4. Connectez-vous avec le nom d’utilisateur et le mot de passe

6.4 Comment configurer SSH sur Ubuntu WSL ?

6.4.1 Installer le serveur SSH

sudo apt update && sudo apt install openssh-server

6.4.2 Modifier les paramètres SSH

PasswordAuthentication yes

Démarrez SSH manuellement (WSL n’utilise pas systemd) :

sudo service ssh start

6.5 Bonnes pratiques de sécurité supplémentaires

6.5.1 Utiliser Fail2Ban

sudo apt install fail2ban -y
[sshd]
enabled = true
port = 22
maxretry = 3
findtime = 600
bantime = 3600
sudo systemctl restart fail2ban

6.5.2 Changer le port SSH

Port 2200
sudo ufw allow 2200/tcp

6.6 Comment surveiller les journaux SSH en temps réel ?

sudo journalctl -u ssh -f
sudo cat /var/log/auth.log | grep ssh

6.7 Astuces pour utiliser SSH plus facilement

6.7.1 Utiliser .ssh/config pour des connexions simples

Host myserver
    HostName 192.168.1.100
    User user
    Port 2200
    IdentityFile ~/.ssh/id_rsa

Puis connectez-vous avec :

ssh myserver

6.7.2 Utiliser ssh-agent

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

Conclusion

Cette section résume les questions fréquemment posées liées à SSH :

  • Comment résoudre les problèmes de délai d’attente SSH
  • Comment récupérer un mot de passe oublié
  • Comment utiliser SSH sur Windows et WSL
  • Meilleures pratiques de sécurité
  • Comment vérifier les journaux SSH
  • Astuces pour rendre SSH plus pratique en utilisant .ssh/config

En appliquant ces techniques, vous pouvez créer un environnement SSH sécurisé et efficace et gérer les serveurs distants en toute fluidité.

年収訴求