Guide complet de la configuration SSH sous Ubuntu | Installation, renforcement de la sécurité et dépannage

目次

1. Introduction

Configurer SSH sur Ubuntu est essentiel pour gérer des serveurs distants. SSH (Secure Shell) est un protocole qui fournit une communication sécurisée et chiffrée, largement utilisé pour l’accès à distance aux serveurs, l’exécution de commandes et les transferts de fichiers.

Dans ce guide, nous couvrirons tout, de l’installation de base aux configurations de sécurité avancées pour SSH sur Ubuntu.

1.1 Pourquoi configurer SSH sur Ubuntu ?

1.1.1 Qu’est‑ce que SSH ?

SSH (Secure Shell) est un protocole conçu pour 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 (transfert de ports). Contrairement aux protocoles traditionnels comme Telnet ou FTP, SSH chiffre toutes les communications, ce qui le rend très sécurisé.

1.1.2 Quand avez‑vous besoin de SSH sur Ubuntu ?

SSH est utile pour la gestion à distance dans divers scénarios, tels que :

  • Gestion des serveurs cloud: Les services cloud comme AWS, GCP et Vultr utilisent SSH pour l’accès à distance aux serveurs.
  • Opérations à distance dans un environnement LAN: Accéder aux serveurs internes ou aux machines de développement via SSH pour le travail à distance.
  • Gestion des appareils IoT: Contrôler à distance des appareils embarqués comme le Raspberry Pi.

Par défaut, SSH est désactivé sur Ubuntu. Pour l’utiliser, vous devez l’installer et le configurer manuellement.

2. Configuration SSH de base

Pour utiliser SSH sur Ubuntu, vous devez installer le serveur SSH (OpenSSH) et le configurer correctement. Cette section couvre l’installation, les paramètres de base, la configuration du pare-feu et comment se connecter à votre 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 à distance, les transferts de fichiers sécurisés (SCP et SFTP) et le transfert de ports.

2.1.2 Installation d’OpenSSH

Par défaut, Ubuntu n’est pas fourni avec un serveur SSH pré‑installé. Utilisez la commande suivante pour l’installer :

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

Cette commande met à jour la liste des paquets et installe le serveur OpenSSH.

2.1.3 Démarrage et activation du serveur SSH

Une fois installé, démarrez le serveur SSH et activez‑le pour qu’il se lance au démarrage.

sudo systemctl enable --now ssh

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

2.1.4 Vérification du statut SSH

Pour vérifier si le serveur SSH fonctionne, utilisez :

systemctl status ssh

Si vous voyez une sortie similaire à la suivante, SSH fonctionne correctement :

● 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

Si vous voyez inactive (dead) ou failed, démarrez le service manuellement :

sudo systemctl start ssh

2.2 Configuration du pare-feu (UFW)

Ubuntu fournit ufw (Uncomplicated Firewall) pour une gestion simplifiée du pare-feu. Vous devez configurer UFW pour autoriser les connexions SSH.

2.2.1 Vérification du statut UFW

Vérifiez le statut actuel du pare-feu avec :

sudo ufw status

Exemple de sortie (si UFW est désactivé) :

Status: inactive

Exemple de sortie (si UFW est activé) :

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

2.2.2 Autorisation du trafic SSH

Pour autoriser les connexions SSH sur le port par défaut 22, exécutez :

sudo ufw allow ssh

Sinon, spécifiez le port explicitement :

sudo ufw allow 22/tcp

2.2.3 Activation de UFW

Si UFW est désactivé, activez‑le avec :

sudo ufw enable

Avant d’activer UFW, assurez‑vous que SSH est autorisé, sinon vous pourriez vous bloquer hors du système.

2.2.4 Vérification des paramètres UFW

Vérifiez que les règles du pare-feu sont appliquées correctement :

sudo ufw status verbose

Exemple de sortie :

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

Si vous voyez cela, SSH est autorisé à travers le pare-feu.

2.3 Connexion à SSH

Une fois le serveur SSH en fonctionnement, vous pouvez vous connecter depuis un PC client.

2.3.1 Connexion depuis Linux/macOS

Sur Linux ou macOS, ouvrez un terminal et exécutez :

ssh username@server-ip-address

Exemple :

ssh user@192.168.1.100

Lors de la première connexion, vous pouvez voir un avertissement de sécurité comme celui‑ci :

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 et appuyez sur Entrée pour continuer.

2.3.2 Connexion depuis Windows

Sur Windows, vous pouvez utiliser **PowerShell** ou **PuTTY** pour vous connecter via SSH.

Utilisation de PowerShell
Windows 10 et versions ultérieures incluent un client SSH dans PowerShell. Connectez‑vous avec :

ssh username@server-ip-address

Utilisation de PuTTY

  1. Téléchargez et installez PuTTY depuis le site officiel.
  2. Ouvrez PuTTY et saisissez l’adresse IP du serveur dans Host Name (or IP address).
  3. Définissez Connection type sur SSH et cliquez sur Open.
  4. Saisissez votre nom d’utilisateur et votre mot de passe pour vous connecter.

3. Renforcer la sécurité SSH

SSH est un outil puissant pour l’accès à distance, mais le laisser avec les paramètres par défaut peut présenter des risques de sécurité. Les attaquants ciblent souvent les serveurs SSH en utilisant des attaques par force brute ou des analyses de ports. Pour créer un environnement SSH plus sécurisé, il est essentiel d’appliquer des configurations de sécurité appropriées.

3.1 Désactivation de la connexion root

Par défaut, Ubuntu peut autoriser la connexion root via SSH. Étant donné que le compte root possède tous les privilèges du système, il constitue une cible fréquente pour les attaquants. Désactiver la connexion root et utiliser un compte utilisateur ordinaire améliore considérablement la sécurité.

3.1.1 Étapes de configuration

  1. Modifiez le fichier de configuration SSH /etc/ssh/sshd_config.
sudo nano /etc/ssh/sshd_config
  1. Trouvez la ligne suivante et remplacez‑la par PermitRootLogin no.
PermitRootLogin no
  1. Enregistrez le fichier et redémarrez le service SSH.
sudo systemctl restart ssh
  1. Vérifiez que le paramètre a bien été appliqué.
sudo grep PermitRootLogin /etc/ssh/sshd_config

Si la sortie indique PermitRootLogin no, le paramètre a été appliqué avec succès.

3.2 Désactivation de l’authentification par mot de passe et activation de l’authentification par clé publique

Utiliser l’authentification par clé publique est beaucoup plus sûr que de se fier à l’authentification par mot de passe. Avec l’authentification par clé publique, vous n’avez pas besoin de saisir un mot de passe, ce qui réduit le risque d’attaques par force brute.

3.2.1 Génération d’une paire de clés SSH

Sur votre PC local, générez une paire de clés SSH :

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

Cela créera deux fichiers :

  • Clé privée (id_rsa)Conservez‑la sur votre PC local (ne la partagez jamais publiquement).
  • Clé publique (id_rsa.pub)Copiez‑la sur le serveur.

3.2.2 Copie de la clé publique sur le serveur

Utilisez la commande suivante pour copier votre clé publique sur le serveur :

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

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

Modifiez le fichier de configuration SSH :

sudo nano /etc/ssh/sshd_config

Trouvez la ligne suivante et remplacez‑la par :

PasswordAuthentication no

Redémarrez SSH pour appliquer les modifications :

sudo systemctl restart ssh

3.3 Restriction de l’accès SSH à des utilisateurs spécifiques

Pour renforcer la sécurité, vous pouvez limiter l’accès SSH à des utilisateurs spécifiques.

4>3.3.1 Étapes de configuration

  1. Ouvrez le fichier de configuration SSH.
sudo nano /etc/ssh/sshd_config
  1. Ajoutez la ligne suivante, en spécifiant les utilisateurs autorisés.
AllowUsers user1 user2
  1. Redémarrez SSH pour appliquer les modifications.
sudo systemctl restart ssh

3.4 Modification du port SSH

Le port SSH par défaut (22) est fréquemment ciblé par les attaquants. Le changer pour un port non standard peut réduire le risque d’attaques automatisées.

3.4.1 Étapes de configuration

  1. Ouvrez le fichier de configuration SSH.
sudo nano /etc/ssh/sshd_config
  1. Trouvez la ligne suivante et remplacez‑la par un port personnalisé (par ex., 2200).
Port 2200
  1. Enregistrez le fichier et redémarrez SSH.
sudo systemctl restart ssh

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

Après avoir changé le port SSH, autorisez le nouveau port via UFW :

sudo ufw allow 2200/tcp

Vérifiez les paramètres :

sudo ufw status

3.5 Prévention des attaques par force brute avec Fail2Ban

Fail2Ban est un outil qui détecte les tentatives de connexion SSH échouées et bloque temporairement l’adresse IP de l’attaquant.

3.5.1 Installation de Fail2Ban

sudo apt install fail2ban -y

3.5.2 Création d’un fichier de configuration

Copiez le fichier de configuration par défaut :

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

Modifiez le fichier de configuration :

sudo nano /etc/fail2ban/jail.local

Modifiez la section SSH comme suit :

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

3.5.3 Redémarrage de Fail2Ban

Redémarrez Fail2Ban pour appliquer les modifications :

sudo systemctl restart fail2ban

3.5.4 Vérification de la liste des bannissements

Pour vérifier quelles IP sont bannies :

sudo fail2ban-client status sshd

Résumé

Dans cette section, nous avons abordé les améliorations essentielles de la sécurité SSH, notamment :

  • Désactivation de la connexion root
  • Désactivation de l’authentification par mot de passe et activation de l’authentification par clé publique
  • Restriction de l’accès SSH à des utilisateurs spécifiques
  • Modification du port SSH
  • Utilisation de Fail2Ban pour bloquer les attaques par force brute

En mettant en œuvre ces mesures, vous pouvez créer un environnement SSH plus sûr.

4. Configuration SSH avancée

Après avoir configuré la sécurité SSH, vous pouvez profiter des paramètres avancés pour améliorer la convivialité et la sécurité. Cette section couvre la gestion de ssh.socket dans Ubuntu 22.10 et versions ultérieures, le tunneling SSH (transfert de ports), la configuration de plusieurs ports SSH et la restriction de l’accès SSH à des adresses IP spécifiques.

4.1 Utilisation de ssh.socket dans Ubuntu 22.10 et versions ultérieures

À partir d’Ubuntu 22.10, la gestion du service SSH peut passer de ssh.service à ssh.socket. Cela permet à SSH de démarrer dynamiquement lorsqu’une demande de connexion est reçue, réduisant ainsi l’utilisation des ressources.

4.1.1 Vérification de l’état de ssh.socket

Pour vérifier si ssh.socket est activé, exécutez :

sudo systemctl status ssh.socket

Exemple de sortie (si 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 Activation ou désactivation de ssh.socket

Si ssh.socket est désactivé, activez-le avec :

sudo systemctl enable --now ssh.socket

Pour revenir au ssh.service traditionnel, désactivez ssh.socket et activez ssh.service à la place :

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

4.2 Tunnel SSH (transfert de ports)

Le tunnel SSH permet une transmission sécurisée des données entre un serveur distant et un PC local, en contournant les réseaux externes.

4.2.1 Transfert de port local

Utile pour accéder de manière sécurisée à des bases de données ou serveurs web distants.

Exemple : connexion à un serveur MySQL distant (port 3306) depuis votre PC local

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

4.2.2 Transfert de port distant

Exposez un service local à un serveur distant via SSH.

Exemple : redirection d’un serveur web local (port 80) vers le port 8080 sur un serveur distant

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

4.2.3 Transfert de port dynamique

Transforme SSH en un proxy SOCKS pour une navigation web anonyme.

Exemple : création d’un proxy SOCKS sur le port local 1080

ssh -D 1080 username@server-ip-address

4.3 Écoute sur plusieurs ports SSH

Par défaut, SSH écoute sur un seul port (port 22). Configurer plusieurs ports offre une flexibilité d’accès.

4.3.1 Étapes de configuration

  1. Modifier le fichier de configuration SSH.
sudo nano /etc/ssh/sshd_config
  1. Ajouter plusieurs entrées de port.
Port 22
Port 2200
  1. Redémarrer SSH.
sudo systemctl restart ssh
  1. Autoriser le nouveau port dans le pare-feu.
sudo ufw allow 2200/tcp

4.4 Restriction de l’accès SSH à des adresses IP spécifiques

Pour renforcer la sécurité, vous pouvez limiter l’accès SSH à des adresses IP spécifiques.

4.4.1 Configuration de /etc/hosts.allow

Autorisez l’accès SSH uniquement depuis certaines adresses IP en modifiant :

sudo nano /etc/hosts.allow

Ajoutez la ligne suivante (remplacez 192.168.1.100 par l’adresse IP autorisée) :

sshd: 192.168.1.100

4.4.2 Configuration de /etc/hosts.deny

Pour bloquer toutes les autres IP par défaut :

sudo nano /etc/hosts.deny
sshd: ALL

Cela garantit que seules les IP répertoriées dans hosts.allow peuvent accéder à SSH.

Résumé

Cette section couvrait les paramètres SSH avancés, notamment :

  • Gestion de ssh.socket sous Ubuntu 22.10 et versions ultérieures
  • Utilisation du tunneling SSH (redirection de ports) pour des connexions sécurisées
  • Écoute sur plusieurs ports SSH
  • Restriction de l’accès SSH à des IP spécifiques

L’application de ces paramètres améliore la sécurité et la convivialité de SSH.

5. Dépannage des problèmes SSH

Même avec une configuration correcte, des problèmes SSH peuvent survenir. Cette section propose des solutions aux problèmes SSH courants.

5.1 Impossible de se connecter à SSH

Si vous obtenez une erreur Connection refused ou un délai d’attente dépassé, vérifiez ce qui suit.

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

Vérifiez l’état du service SSH :

sudo systemctl status ssh

Solution :

  • Si Active: inactive (dead) ou failed, redémarrez SSH.
sudo systemctl restart ssh
  • Activez le démarrage automatique de SSH.
sudo systemctl enable ssh

5.1.2 Le pare-feu bloque SSH

Assurez‑vous que SSH est autorisé via UFW :

sudo ufw status

Solution : Si SSH n’est pas autorisé :

sudo ufw allow 22/tcp

Si vous utilisez un port personnalisé :

sudo ufw allow 2200/tcp

5.2 Erreurs d’authentification

Si SSH rejette les tentatives de connexion, vérifiez ce qui suit :

5.2.1 Nom d’utilisateur ou mot de passe incorrect

Assurez‑vous d’utiliser le bon nom d’utilisateur :

ssh username@server-ip-address

5.2.2 Problèmes d’authentification par clé publique

Vérifiez que votre clé publique est correctement stockée dans ~/.ssh/authorized_keys.

cat ~/.ssh/authorized_keys

5.2.3 Permissions incorrectes

Assurez‑vous que le répertoire et les fichiers SSH ont les bonnes permissions :

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

Résumé

Cette section couvre les problèmes SSH courants et leurs solutions, y compris :

  • Vérifier si SSH fonctionne
  • S’assurer que le pare-feu ne bloque pas SSH
  • Résoudre les problèmes d’authentification

Utilisez ces étapes de dépannage pour résoudre rapidement les problèmes de connexion SSH.

6. FAQ (Foire aux questions)

Cette section traite des questions courantes liées à SSH et des solutions pour améliorer votre expérience SSH tout en maintenant la sécurité.

6.1 Comment empêcher les expirations SSH ?

Si les connexions SSH se déconnectent après une période d’inactivité, essayez les paramètres suivants.

6.1.1 Configuration côté serveur

Modifiez /etc/ssh/sshd_config et ajoutez :

ClientAliveInterval 60
ClientAliveCountMax 3

Redémarrez SSH pour appliquer les modifications :

sudo systemctl restart ssh

6.1.2 Configuration côté client

Modifiez le fichier de configuration SSH local ~/.ssh/config :

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

6.2 Que faire si j’oublie mon mot de passe SSH ?

6.2.1 Si vous avez un accès physique au serveur

  1. Démarrez en mode de récupération via le menu GRUB.
  2. Réinitialisez le mot de passe avec la commande suivante :
passwd username
  1. Redémarrez le système.

6.2.2 Si vous ne pouvez pas accéder physiquement au serveur (par ex., VPS cloud)

  • Utilisez la fonction console du fournisseur cloud pour accéder au serveur.
  • Configurez l’authentification par clé SSH au lieu de vous fier aux mots de passe.

6.3 Comment utiliser SSH sous Windows ?

6.3.1 Utilisation de PowerShell

Windows 10 et versions ultérieures incluent un client SSH intégré. Ouvrez PowerShell et exécutez :

ssh username@server-ip-address

6.3.2 Utilisation de PuTTY

  1. Téléchargez et installez PuTTY.
  2. Saisissez l’IP du serveur dans Host Name (or IP address).
  3. Sélectionnez SSH comme type de connexion et cliquez sur Open.
  4. Connectez‑vous avec votre nom d’utilisateur et votre mot de passe.

6.4 Comment configurer SSH dans Ubuntu WSL (Windows Subsystem for Linux) ?

Pour activer SSH sur WSL, suivez ces étapes.

6.4.1 Installation du serveur SSH

sudo apt update && sudo apt install openssh-server

6.4.2 Configuration de SSH

Modifiez /etc/ssh/sshd_config et activez l’authentification par mot de passe :

PasswordAuthentication yes

Comme WSL n’utilise pas systemd par défaut, démarrez SSH manuellement :

sudo service ssh start

6.5 Quelles mesures de sécurité supplémentaires devrais‑je prendre ?

6.5.1 Installation de Fail2Ban

Prévenez les attaques par force brute en installant Fail2Ban :

sudo apt install fail2ban -y

Modifiez le fichier de configuration /etc/fail2ban/jail.local :

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

Redémarrez Fail2Ban :

sudo systemctl restart fail2ban

6.5.2 Changement du port SSH

Modifiez /etc/ssh/sshd_config pour changer le port SSH par défaut :

Port 2200

Redémarrez SSH et mettez à jour les paramètres du pare‑feu :

sudo ufw allow 2200/tcp

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

Pour afficher les journaux SSH en temps réel, utilisez :

sudo journalctl -u ssh -f

Pour consulter les journaux précédents :

sudo cat /var/log/auth.log | grep ssh

6.7 Comment rendre SSH plus pratique ?

6.7.1 Utilisation de .ssh/config pour une connexion facile

Enregistrez les connexions SSH fréquemment utilisées dans ~/.ssh/config :

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

Vous pouvez maintenant vous connecter avec :

ssh myserver

6.7.2 Utilisation de ssh-agent pour éviter de saisir le mot de passe à chaque fois

Exécutez :

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

Cela permet des connexions SSH sans saisir la phrase de passe à chaque fois.

Résumé

Cette section fournit des réponses aux questions courantes liées à SSH, couvrant :

  • Prévention des expirations de session SSH
  • Récupération d’un mot de passe oublié
  • Utilisation de SSH sous Windows et WSL
  • Mise en place de mesures de sécurité supplémentaires
  • Surveillance des journaux SSH
  • Rendre l’utilisation de SSH plus pratique

En suivant ces conseils, vous pouvez créer un environnement SSH sécurisé et efficace pour la gestion à distance des serveurs.

Articles associés

Articles

1. Introduction En utilisant SSH sur Ubuntu, vous pouvez accéder de manière sécurisée et gérer votre serveur ou votre P[…]

年収訴求