Configuration d'un serveur SSH
Mise à jour :
SSH, ou Secure Shell, est un protocole permettant d’établir une communication chiffrée, donc sécurisée qui permet aux administrateurs d’accéder à distance à des serveurs.
SSH (Secure Shell) opère principalement dans la couche application du modèle OSI (Open Systems Interconnection) et utilise le protocole TCP (Transmission Control Protocol) au niveau de la couche transport pour établir une connexion fiable et sécurisée entre le client et le serveur.
Histoire
L’histoire de SSH (Secure Shell) remonte au milieu des années 1990 et est étroitement liée à l’évolution de la sécurité Internet. Voici un aperçu de son développement :
-
Origines (1995) : SSH a été créé par Tatu Ylönen, un chercheur en sécurité informatique de l’Université de Technologie d’Helsinki, en réponse à une attaque par écoute (“sniffing attack”) sur le réseau de son université. Cette attaque a mis en évidence les vulnérabilités des protocoles de connexion à distance existants, comme Telnet et Rlogin, qui ne chiffraient pas leurs communications.
-
SSH-1 (1995) : La première version de SSH (SSH-1) a été développée pour remplacer ces protocoles non sécurisés. Elle offrait un cryptage des communications, empêchant ainsi l’interception des données transmises entre l’hôte et le client. SSH-1 est rapidement devenu populaire dans les communautés universitaires et scientifiques.
-
SSH-2 (1996) : Une nouvelle version, SSH-2, a été introduite pour corriger des vulnérabilités de sécurité dans SSH-1. SSH-2 n’était pas rétrocompatible avec SSH-1, mais apportait des améliorations significatives, notamment une architecture plus modulaire et un cryptage plus robuste.
-
Commercialisation (1996) : Tatu Ylönen a fondé SSH Communications Security pour commercialiser le protocole SSH. La société a développé des versions propriétaires de SSH, mais la version originale est restée open-source.
-
OpenSSH (1999) : Face à la version propriétaire de SSH, la communauté open-source a créé OpenSSH, un fork gratuit et open-source de SSH développé par le projet OpenBSD ↗. OpenSSH est devenu la version la plus utilisée de SSH et est intégré dans de nombreuses distributions Linux et systèmes Unix.
-
Évolution Continue : SSH continue d’évoluer, avec des améliorations constantes en matière de sécurité et de fonctionnalités. De nouvelles méthodes d’authentification, des algorithmes de cryptage plus robustes et des fonctionnalités avancées comme le tunneling et le port forwarding sont régulièrement ajoutés.
Installation de SSH
L’installation de SSH varie légèrement selon la distribution Linux que vous utilisez. Voici les étapes pour les distributions les plus courantes.
Sur Debian et Ubuntu
Ouvrez votre terminal et exécutez la commande suivante pour installer le serveur SSH :
Une fois l’installation terminée, le service SSH devrait démarrer automatiquement.
Sur Fedora et CentOS
Ouvrez votre terminal et exécutez la commande suivante pour installer le serveur SSH :
Sur OpenSuse
Ouvrez votre terminal et exécutez la commande suivante pour installer le serveur SSH :
Gestion du service sshd
-
Démarrer et Activer le Service SSH : Une fois installé, vous devez démarrer le service SSH et l’activer pour qu’il démarre automatiquement lors du démarrage du système. Utilisez les commandes suivantes :
-
Vérifier le Statut du Service : Pour vous assurer que le service SSH fonctionne correctement, vérifiez son statut avec :
Configuration de ssh
Après avoir installé SSH, il est important de le configurer correctement pour assurer une sécurité optimale, c’est ce qu’on appelle le durcissement. Voici les étapes pour configurer SSH sur votre serveur Linux.
Accès au Fichier de Configuration
Le fichier de configuration principal pour SSH est /etc/ssh/sshd_config
.
Pour le créez, ouvrez le avec un éditeur de texte en tant que root
, par
exemcréer
Si vous n’êtes pas à l’aise avec l’éditeur vi
, remplacez le par nano
.
Paramètres Importants à Configurer
Pour des raisons de sécurité, il est recommandé de désactiver l’accès SSH direct
pour l’utilisateur root
. Ajoutez la ligne PermitRootLogin no
.
L’authentification par clé publique est plus sécurisée que l’authentification
par mot de passe. Ajoutez la ligne PubKeyAuthentication yes
.
Ce qui donne :
Après avoir effectué les modifications, sauvegardez le fichier et quittez l’éditeur de texte. Pour que les changements prennent effet, redémarrez le service SSH :
Vérification de l’application des paramètres
Pour afficher les paramètres actifs, il suffit d’utiliser la commande suivante :
Sécurisation Avancée de SSH
Après avoir configuré le service SSH, il est essentiel d’adopter des mesures de sécurité avancées pour renforcer la protection de votre serveur. Voici comment utiliser les pare-feu firewalld ou ufw pour sécuriser votre serveur SSH.
Configuration du Pare-feu avec UFW (Uncomplicated Firewall)
UFW est un outil de gestion de pare-feu convivial pour les systèmes basés sur Debian et Ubuntu.
Activation de UFW
Activez UFW avec la commande suivante :
Configuration des Règles pour SSH
Autorisez les connexions SSH (sur le port 22 par défaut ou un autre si vous avez modifié le port SSH) :
Ou, si vous avez changé le port SSH :
Ou si vous voulez restreindre l’accès à des adresses IP spécifiques :
Remplacez [adresse_ip]
par l’adresse IP spécifique. Répétez cette commande
pour chaque adresse IP autorisée.
Application des Règles
Pour appliquer les modifications, redémarrez UFW :
Configuration du Pare-feu avec firewalld
firewalld est un outil de gestion de pare-feu flexible utilisé sur les distributions Linux à base de Red Hat.
Règles de Base pour SSH
Pour autoriser les connexions SSH (sur le port 22 par défaut), utilisez :
Ou si vous avez changé le port SSH :
Pour appliquer cette régle :
Configuration de fail2ban
Le service SSH (Secure Shell) est souvent la cible principale des attaques par force brute, où des assaillants tentent de deviner les identifiants de connexion par des essais répétés. Pour contrer ces menaces, une solution de sécurité robuste et proactive est indispensable. C’est ici que Fail2Ban, un outil de prévention des intrusions, entre en jeu.
Fail2Ban est un logiciel de sécurité qui surveille les journaux de votre système à la recherche de signes d’activités suspectes, en particulier des tentatives de connexion SSH répétées et infructueuses. Lorsqu’un schéma d’attaque est détecté, Fail2Ban intervient automatiquement pour “bannir” l’adresse IP de l’attaquant, en la bloquant temporairement de l’accès au service SSH. Cette action réduit considérablement le risque d’une intrusion réussie, décourageant l’attaquant et protégeant le système contre les accès non autorisés.
Configuration de Base de Fail2Ban
Il est recommandé de ne pas modifier directement le fichier de configuration par
défaut jail.conf
de Fail2Ban, car il peut être écrasé lors des mises à jour.
Créez plutôt un fichier jail.local
pour vos configurations personnalisées :
Ajoutez les lignes suivantes en adaptant à vos besoins dans la section [sshd]
:
Où :
ignoreip
: Adresses IP à ignorer.bantime
: Durée du bannissement.findtime
: Intervalle de temps pendant lequel les échecs sont comptés.maxretry
: Nombre de tentatives de connexion échouées avant bannissement.
Démarrage et Test de Fail2Ban
Après avoir configuré Fail2Ban, redémarrez le service pour appliquer les changements :
Vérifier le Statut de Fail2Ban :
Utilisez la commande suivante pour vérifier que Fail2Ban fonctionne correctement :
Pour voir les détails de la prison SSH, utilisez :
Connexion au Serveur SSH
Une fois SSH installé et configuré sur votre serveur, la prochaine étape est de se connecter à ce serveur à partir d’un client SSH. Voici comment procéder.
Connexion Basique avec mot de passe
Pour établir une connexion SSH de base, utilisez la commande suivante dans le
terminal de votre client (remplacez utilisateur
, adresse_ip
et port
par
vos propres valeurs) :
Par exemple :
Utilisation de la Clé Publique pour l’Authentification
Pour une sécurité optimale dans SSH, les types de clés recommandés ont évolué au fil du temps avec l’avancement de la technologie cryptographique. Actuellement, les types de clés les plus sécurisés sont :
- Ed25519 : C’est un type de clé basé sur l’algorithme de signature numérique EdDSA utilisant Curve25519. Il est reconnu pour sa performance et sa sécurité robuste, tout en ayant une taille de clé relativement petite, ce qui le rend rapide.
- RSA : Les clés RSA restent largement utilisées et sont considérées comme sûres avec une longueur de clé suffisante. Actuellement, une clé RSA devrait être d’au moins 2048 bits, bien que 4096 bits soient souvent recommandés pour une sécurité accrue.
Voici une liste des paramètres les plus importants de la commande ssh-keygen
:
- -t : Spécifie le type de clé à générer (par exemple, rsa, dsa, ecdsa, ed25519).
- -b : Définit le nombre de bits dans la clé, utilisé pour augmenter la sécurité de la clé (par exemple, 2048, 4096).
- -C : Permet d’ajouter un commentaire à la clé, généralement utilisé pour l’adresse e-mail ou l’identifiant de l’utilisateur.
- -f : Spécifie le nom du fichier dans lequel enregistrer la clé générée.
- -N : Permet de définir une nouvelle passphrase (mot de passe) pour la clé.
- -p : Change la passphrase d’une clé privée existante.
- -q : Mode silencieux, ne génère pas de sorties non nécessaires.
- -y : Lit une clé privée et produit une clé publique correspondante.
Il est important de noter que d’autres types de clés comme DSA et ECDSA sont également disponibles, mais Ed25519 et RSA avec une longueur de clé suffisante sont généralement privilégiés pour une meilleure sécurité.
Génération d’une clé
Sur votre machine cliente, générez une paire de clés (publique et privée) en utilisant :
Suivez les instructions à l’écran pour spécifier un emplacement de fichier et créer éventuellement un mot de passe pour la clé. Si vous indiquez un mot de passe, notez-le soigneusement, car vous en aurez besoin à chaque connexion.
Copie de la Clé Publique sur le Serveur
Pour copier votre clé publique sur le serveur, utilisez la commande
ssh-copy-id
:
Cela ajoutera votre clé publique au fichier ~/.ssh/authorized_keys
de
l’utilisateur sur le serveur.
Connexion avec la Clé Publique
Maintenant, lorsque vous vous connectez via SSH, le serveur vérifiera votre clé publique. Si elle correspond à la clé privée sur votre client, vous serez connecté sans avoir besoin d’un mot de passe.
Configuration du client
Lorsque vous êtes amené à vous connecter à de nombreux serveurs, chacun avec ses
propres paramètres, ou si vous avez besoin d’effectuer des connexions en
cascade, il peut rapidement devenir difficile de se souvenir de tous les détails
nécessaires. Dans ces situations, il est recommandé d’utiliser le fichier
.ssh/config
pour une gestion efficace de ces informations. Ce fichier réside
dans un dossier .ssh
se trouvant dans votre répertoire personnel.
Syntaxe de base
Typiquement, sur des systèmes Linux ou macOS, vous le trouverez sous
/home/votre_nom_utilisateur/.ssh/config
, tandis que sur Windows, le chemin
correspondant est C:\Users\votre_nom_utilisateur\.ssh\config
.
La structure de base du fichier est simple : chaque bloc de configuration
commence par le mot-clé Host
, suivi du nom de l’hôte ou d’un alias que vous
définissez pour le serveur. Ce nom est celui que vous utiliserez dans la
commande ssh
pour initier une connexion.
Par exemple :
Dans cet exemple, serveurweb
est l’alias que vous utilisez pour la connexion.
HostName
spécifie l’adresse réelle du serveur et User
définit le nom
d’utilisateur à utiliser pour la connexion.
Il est important de noter que .ssh/config
est sensible à la casse et doit
être correctement formaté pour fonctionner comme prévu. Les espaces et
l’indentation (généralement des espaces) sont utilisés pour distinguer les
directives appartenant à chaque hôte.
Utilisation des jokers
L’astérisque *
dans le fichier .ssh/config
permet de spécifier des
paramètres de configuration de manière globale. Cela signifie que les options
définies sous un bloc Host *
seront appliquées à toutes les connexions SSH, à
moins qu’elles ne soient explicitement redéfinies dans des blocs Host
spécifiques.
Exemple de Configuration Globale :
Dans cet exemple, plusieurs options sont définies pour s’appliquer à toutes les connexions SSH :
- Compression : L’activation de la compression (
Compression yes
) est utile pour des connexions plus rapides, en particulier sur des liaisons avec des débits limités ou des latences élevées. - ServerAliveInterval : Cette option (
ServerAliveInterval 60
) configure l’envoi d’un message au serveur toutes les 60 secondes. C’est un moyen efficace de maintenir des connexions inactives ouvertes, évitant ainsi les déconnexions automatiques dues à l’inactivité. - ForwardX11 : En définissant
ForwardX11 no
, le transfert X11 est désactivé par défaut pour toutes les connexions. Le transfert X11 peut être activé pour des hôtes spécifiques si nécessaire.
L’autre joker est ?
qui représente un seul caractère. Par exemple, Host ?.example.com
correspondra à a.example.com
, b.example.com
, mais pas à
ab.example.com
.
La négation
L’utilisation de la négation dans le fichier de configuration client SSH
(~/.ssh/config
) est une fonctionnalité qui vous permet d’exclure
spécifiquement certains hôtes des règles générales définies dans le fichier.
Cela est souvent utilisé en combinaison avec des configurations globales pour
appliquer des exceptions à ces règles.
Dans le fichier ~/.ssh/config
, vous pouvez définir des règles générales pour
tous les hôtes en utilisant Host *
et ensuite utiliser la négation pour
exclure certains hôtes de ces règles. La syntaxe pour la négation est Host !<nom_du_hôte>
.
Voici un exemple pour illustrer l’utilisation de la négation :
Dans cet exemple, la compression et la désactivation du transfert X11 sont
appliquées à toutes les connexions, sauf celles effectuées vers
serveursensible.exemple.com
. Lorsque vous vous connectez à
serveursensible.exemple.com
, SSH ignore les configurations sous Host *
et
utilise uniquement les configurations spécifiques définies pour
serveursensible.exemple.com
(si elles existent) ou les valeurs par défaut.
Commande à Exécuter sur le Serveur Distant
L’une des fonctionnalités avancées du fichier .ssh/config
est la possibilité
de spécifier une commande à exécuter immédiatement après la connexion au serveur
distant. Cette fonctionnalité, désignée par la directive RemoteCommand
, offre
un moyen d’automatiser les tâches et de simplifier les processus répétitifs.
Utilité de RemoteCommand :
- Automatisation : Permet d’exécuter automatiquement des scripts ou des commandes spécifiques dès que la connexion SSH est établie.
- Gain de Temps : Élimine le besoin de saisir manuellement des commandes fréquemment utilisées après chaque connexion.
- Personnalisation : Offre la possibilité de personnaliser l’environnement de travail en fonction des besoins spécifiques de l’utilisateur ou du serveur.
Configuration de RemoteCommand : Pour utiliser RemoteCommand
, ajoutez la
directive dans le fichier de configuration SSH du client avec la commande
souhaitée. Par exemple :
Dans cet exemple, lorsque vous vous connectez au serveurweb
, SSH exécutera
automatiquement la commande cd /var/www && ls
, vous amenant directement dans
le répertoire du serveur web et listant son contenu.
Points à Considérer :
- Compatibilité : Toutes les versions de SSH ne supportent pas
RemoteCommand
. Assurez-vous que votre client et serveur SSH sont compatibles avec cette fonctionnalité. - Sécurité : Soyez prudent avec les commandes que vous configurez pour s’exécuter automatiquement. Évitez les commandes qui pourraient compromettre la sécurité ou l’intégrité du système.
- Flexibilité :
RemoteCommand
est exécutée dans le contexte de la session SSH, ce qui signifie que vous pouvez utiliser toutes les variables et paramètres disponibles dans cette session.
Lecture du fichier par le client
Lorsque vous lancez une commande SSH, le client SSH commence par ouvrir et
parcourir le fichier .ssh/config
, le lisant de manière séquentielle, de haut
en bas. Il recherche les blocs Host
qui correspondent au nom d’hôte spécifié
dans la commande. Ce processus implique une correspondance de motifs, où le
client SSH compare le nom d’hôte utilisé dans la commande avec les motifs
définis sous les différentes entrées Host
dans le fichier .ssh/config
.
Si une correspondance est trouvée, SSH applique les configurations définies dans
ce bloc. Dans le cas où plusieurs blocs correspondent (par exemple, un bloc avec
un joker *
et un autre avec le nom d’hôte spécifique), SSH applique la
première configuration correspondante trouvée. Cependant, en cas de surcharge,
où les paramètres pour un hôte spécifique sont définis après les paramètres
généraux, le client SSH donne la priorité aux configurations les plus
spécifiques. Ainsi, même si des paramètres généraux sont définis au début du
fichier, ils seront surchargés par des paramètres plus spécifiques pour un hôte
donné rencontrés plus loin dans le fichier.
Cela signifie que le client SSH construit un ensemble de configurations pour chaque connexion en combinant les paramètres généraux avec les paramètres spécifiques à l’hôte, en donnant la priorité aux derniers. Cette méthode permet une grande flexibilité et une personnalisation fine des connexions SSH, facilitant la gestion de configurations multiples et complexes dans un seul fichier bien organisé.
Les principales options
- Host : Définit un alias pour un hôte, facilitant la connexion à celui-ci avec un nom simple.
- HostName : Spécifie l’adresse réelle ou le nom de domaine du serveur auquel se connecter.
- User : Détermine le nom d’utilisateur par défaut pour la connexion SSH.
- Port : Permet de spécifier un port SSH autre que le port par défaut (22).
- IdentityFile : Indique l’emplacement du fichier de clé privée à utiliser pour la connexion.
- ServerAliveInterval : Définit un intervalle en secondes pour envoyer un message de maintien de connexion au serveur, utile pour garder des sessions inactives ouvertes.
- ServerAliveCountMax : Détermine le nombre de messages de maintien de connexion à envoyer sans réponse du serveur avant de fermer la connexion.
- Compression : Active ou désactive la compression des données pendant la transmission.
- CompressionLevel : Permet de spécifier le niveau de compression (généralement entre 1 et 9).
- StrictHostKeyChecking : Permet de gérer la manière dont SSH vérifie la clé d’hôte du serveur distant.
- UserKnownHostsFile : Spécifie l’emplacement du fichier contenant les clés des hôtes connus.
- RemoteCommand : Définit une commande à exécuter immédiatement après la connexion au serveur distant.
- ForwardAgent : Active ou désactive le transfert de l’agent d’authentification SSH, utile pour les scénarios de saut entre plusieurs serveurs.
Ces options offrent une grande flexibilité pour optimiser et sécuriser vos connexions SSH, en adaptant chaque connexion à vos besoins spécifiques.
L’optimisation des connexions
ControlMaster
est une option de configuration dans SSH qui permet de
réutiliser une connexion SSH existante pour établir de nouvelles connexions SSH
au même hôte. Cela réduit le temps nécessaire pour établir de nouvelles
connexions après la première, car il n’est pas nécessaire de renégocier la
connexion et l’authentification. Lorsque vous vous connectez pour la première
fois à un hôte, SSH établit une connexion complète, y compris
l’authentification. Avec ControlMaster
activé, cette connexion initiale peut
servir de « tunnel » pour d’autres connexions au même hôte.
Un exemple :
Le paramètre ControlMaster auto
permet de réutiliser les connexions
existantes. ControlPath
spécifie le chemin d’un fichier socket utilisé pour
gérer les connexions partagées. ControlPersist 600
indique que la connexion
maître reste active 600 secondes (10 minutes) après la dernière connexion
client, ce qui permet de réutiliser la connexion maître pour d’autres sessions
SSH pendant cette période.
Dans le chemin définit dans le paramêtre ControlPath
, il est fait appel à des
variables dont voici les principales :
- %L : Le premier composant du nom d’hôte local (local hostname). Utile si votre nom d’hôte local contient des points.
- %l : Le nom d’hôte local complet (FQDN). C’est le nom d’hôte canonique, qui peut être utile pour les scripts ou les configurations qui dépendent du nom de domaine complet.
- %n : Le nom d’hôte original tel que spécifié sur la ligne de commande SSH.
- %p : Le numéro de port utilisé pour la connexion SSH.
- %r : Le nom d’utilisateur distant (remote user) pour la connexion SSH.
- %h : Le nom d’hôte du serveur auquel vous vous connectez.
- %C : Un hachage de la chaîne
%l%h%p%r
. Utile pour créer des chemins uniques de manière concise. - %i : L’ID de l’utilisateur local.
- %d : Le répertoire personnel de l’utilisateur local.
- %u : Le nom d’utilisateur local.
- %T : Le fichier temporaire utilisé pour les contrôles maître.
Ces variables fournissent une flexibilité considérable pour configurer les chemins de fichiers et autres options dans SSH, permettant une personnalisation adaptée à divers scénarios et environnements de réseau. Elles sont particulièrement utiles pour des configurations complexes où vous devez gérer de multiples connexions SSH de manière dynamique et automatisée.
Sécurité : Bien que pratique, cette fonctionnalité peut présenter des risques de sécurité si le fichier socket est accessible à des utilisateurs non autorisés. Assurez-vous que le fichier socket est bien protégé.
Debug de connexions SSH
Le débogage des connexions SSH peut être complexe, mais en comprenant les mécanismes sous-jacents et en adoptant une approche méthodique, vous pouvez identifier et résoudre efficacement la plupart des problèmes. SSH (Secure Shell) est un protocole pour sécuriser les connexions réseau, mais divers problèmes peuvent survenir, allant des erreurs de configuration à des problèmes de réseau.
La complexité du débogage SSH provient de plusieurs facteurs :
- Configuration Multiple : SSH implique des configurations à la fois sur le serveur et le client, chacune pouvant être source d’erreurs.
- Problèmes de Réseau : Des problèmes tels que les pare-feu, la redirection de ports ou les problèmes de connectivité réseau peuvent affecter SSH.
- Authentification : Les problèmes d’authentification, y compris les clés SSH, les mots de passe et les permissions, sont des sources courantes de problèmes.
- Messages d’Erreur Vagues : Parfois, SSH ne fournit pas des informations d’erreur suffisamment détaillées, rendant le diagnostic difficile.
Étapes de Débogage de Base
Erreur Man in The Middle
Dans un contexte dynamique, où les serveurs virtuels peuvent être dynamiques en réutilisant les mêmes adresses IP, vous risquez de voir apparaître ce message d’erreur SSH relatif à une attaque de type “Man-in-the-Middle” :
Voici comment cela se produit et ce que cela signifie :
-
Enregistrement des Clés d’Hôte SSH : Lorsque vous vous connectez pour la première fois à un serveur SSH, la clé d’hôte du serveur est enregistrée dans le fichier
known_hosts
sur le client. Cette clé est associée à l’adresse IP ou au nom d’hôte du serveur. -
Changement d’Adresse IP : Dans un environnement dynamique, si un serveur est arrêté puis redémarré, ou si une nouvelle instance est créée, il peut se voir attribuer une nouvelle adresse IP. Si vous essayez de vous connecter à la nouvelle adresse IP, SSH recherche la clé d’hôte correspondante dans le fichier
known_hosts
. -
Détection d’une Potentielle Attaque MitM : Si SSH trouve une entrée pour l’adresse IP dans le fichier
known_hosts
mais que la clé d’hôte ne correspond pas à celle enregistrée, il génère un avertissement de sécurité. SSH considère cela comme une possible attaque Man-in-the-Middle, car il semble que l’identité du serveur ait changé.
Si vous êtes sûr que le changement d’adresse IP est légitime et non le résultat
d’une attaque MitM, vous pouvez résoudre ce problème en supprimant l’ancienne
entrée pour cette adresse IP du fichier known_hosts
. Ceci peut être fait avec
la commande suivante (remplacez adresse.ip
par la véritable adresse IP) :
Après cela, lors de la prochaine tentative de connexion, SSH demandera de vérifier et d’accepter la nouvelle clé d’hôte pour cette adresse IP.
Vérifiez la Connectivité Réseau
Assurez-vous que le serveur est accessible depuis le client. Utilisez des
commandes comme traceroute
, netcat
ou lsof
pour tester la connectivité.
Fixer les problèmes de droits coté client
Pour configurer les permissions correctes sur les fichiers et répertoires liés à
SSH dans votre répertoire .ssh
, il est important de suivre des règles
strictes, car SSH est très sensible aux permissions. Voici les commandes
nécessaires pour définir ces permissions sous un environnement Unix ou Linux :
- Permissions pour le Répertoire .ssh : Le répertoire
.ssh
doit avoir des permissions restreintes, de sorte que seul l’utilisateur puisse lire, écrire et exécuter. Utilisez la commande suivante :
- Permissions pour les Clés Privées : Les clés privées dans
.ssh
doivent également être protégées. Seul l’utilisateur doit avoir des droits de lecture et d’écriture. Exécutez cette commande pour chaque clé privée (par exemple,id_ed25519
) :
- Permissions pour les Clés Publiques et Autres Fichiers : Les clés
publiques (comme
id_ed25519.pub
) et d’autres fichiers commeconfig
ouknown_hosts
peuvent avoir des permissions un peu moins restrictives, permettant la lecture par l’utilisateur. Utilisez cette commande :
- Permissions pour les Fichiers
authorized_keys
: Si vous utilisez un fichierauthorized_keys
pour la gestion des accès SSH, il doit également être protégé. Seul l’utilisateur doit avoir des droits de lecture et d’écriture sur ce fichier :
Debogage coté client
Si tous les points ci-dessus sont OK et que la connexion ne se fait toujours
pas. Utilisez l’option -v
(verbose) avec la commande SSH pour obtenir des
informations détaillées sur le processus de connexion. Pour plus de détails,
utilisez -vv
ou -vvv
.
Un exemple de connexion en mode verbose depuis une machine Windows
Lisez toutes les lignes, car vous allez comprendre rapidement où le problème se situe.
Debogage coté serveur
Vous avez réglé les problèmes de fichiers de configuration coté client et cela
ne fonctionne toujours pas. Consultez les journaux du serveur SSH pour obtenir
des indices sur les échecs de connexion. Sur de nombreux systèmes, ces journaux
se trouvent dans /var/log/auth.log
ou /var/log/secure
.
Modifiez temporairement le niveau de journalisation du serveur SSH (LogLevel
)
pour obtenir plus de détails lors de la connexion.
Un exemple de contenu :
Si vous ne vous voyez pas de connexions provenant de votre adresse IP. Il faudra fouiller dans des problèmes de firewalls.
Conclusion
Maîtriser SSH est une compétence précieuse pour tout professionnel de l’informatique ou utilisateur de Linux. Nous espérons que ce guide vous a aidé à comprendre et à appliquer les principes fondamentaux de SSH pour une utilisation sécurisée et efficace.
L’installation et la configuration correctes de SSH sont des étapes importantes pour assurer une gestion sûre et efficace de vos serveurs Linux. En suivant les instructions fournies dans cette documentation, vous avez appris comment installer SSH sur différentes distributions Linux, comment le configurer pour une sécurité optimale et comment établir une connexion sécurisée avec votre serveur.
La mise en œuvre de l’authentification par clé publique, la modification du port
par défaut et la désactivation de l’accès root
direct renforcent
significativement la sécurité de votre serveur SSH. De plus, la maintenance
régulière de votre système et des mises à jour de sécurité contribue à protéger
votre infrastructure contre les vulnérabilités connues, OpenSSH étant l’une
premières cibles.
Plus loin
Pour ceux qui utilisent Ansible et qui cherche à améliorer les temps d’exécution des playbooks à destination de nombreuses cibles, je vous propose de lire cette documentation.
Dans une prochaine documentation, nous verrons la mise en place de tunnels, de proxyjump, la limitation des ciphers…