clé ssh
Une clé SSH est un élément essentiel du protocole SSH, qui est utilisé pour l'accès sécurisé aux systèmes Linux et à d'autres serveurs via un réseau. SSH signifie Secure Shell, et c'est la méthode standard pour se connecter à distance et en toute sécurité à un serveur. Au lieu de saisir chaque fois un mot de passe, un utilisateur peut utiliser une paire de clés SSH pour s'authentifier automatiquement et en toute sécurité. Cette paire de clés se compose de deux parties : une public key (clé publique) et une private key (clé privée). Ces deux clés sont liées l'une à l'autre par cryptographie asymétrique, une méthode mathématique où une clé chiffre des informations qui ne peuvent être déchiffrées que par l'autre clé.
La private key reste toujours stockée en lieu sûr sur l'ordinateur ou l'ordinateur portable de l'utilisateur. Cette clé ne doit jamais être partagée ni transmise à un serveur externe, car elle prouve l'identité de l'utilisateur. La public key, quant à elle, est téléchargée vers le serveur avec lequel l'utilisateur souhaite se connecter. Lorsqu'une connexion SSH est établie, le serveur vérifie si l'utilisateur possède la private key correspondante qui va de pair avec la public key présente sur le serveur. Si c'est le cas, la connexion est autorisée sans qu'un mot de passe doive être saisi. Ce processus s'appelle l'authentification par clé publique et est plus sûr que l'authentification par mot de passe, car il est plus difficile à craquer.
La création d'une paire de clés SSH se fait généralement avec la commande `ssh-keygen`, qui fait partie de l'implémentation OpenSSH du protocole SSH. Cette commande génère par défaut une clé RSA, mais peut aussi être utilisée pour créer d'autres types de clés, comme Ed25519 ou ECDSA, selon les exigences de sécurité. Pendant le processus de génération, il est demandé où les clés doivent être stockées (généralement dans le dossier `~/.ssh/`) et si la private key doit être protégée par une phrase de passe (passphrase). L'utilisation d'une passphrase ajoute une couche de sécurité supplémentaire : même si la private key tombe entre de mauvaises mains, elle est inutilisable sans la passphrase.
Une fois la paire de clés créée, la public key doit être copiée vers le serveur cible. Cela peut se faire de différentes manières. Une méthode couramment utilisée est la commande `ssh-copy-id`, qui ajoute automatiquement la public key au fichier `~/.ssh/authorized_keys` sur le serveur. Ce fichier contient toutes les public keys qui sont autorisées à accéder au serveur. Manuellement, la public key peut aussi être copiée en collant le contenu du fichier `.pub` dans le fichier `authorized_keys`. Une fois cela fait, l'utilisateur peut se connecter avec `ssh gebruiker@host`, sans mot de passe.
Les clés SSH sont largement utilisées dans les environnements où la sécurité et l'automatisation sont importantes. Pensez aux workflows DevOps, où les serveurs sont configurés automatiquement via des scripts, ou à l'utilisation de git via SSH au lieu de HTTPS. Comme aucune saisie interactive de mot de passe n'est nécessaire, des outils comme Ansible, Terraform ou rsync peuvent se connecter aux serveurs sans intervention humaine. Cela rend l'automatisation sûre et efficace.
Différents outils sont disponibles pour simplifier la gestion des clés SSH, surtout pour les utilisateurs qui sont moins familiers avec la ligne de commande. Keymaker est un exemple d'un tel outil. Il offre une interface graphique permettant aux utilisateurs de générer de nouvelles clés SSH, de gérer des clés existantes, de copier des public keys vers le presse-papiers et de déployer des clés sur des serveurs externes. Keymaker prend en charge différents types de clés, dont Ed25519, RSA et ECDSA, et est conçu pour un environnement GNOME moderne. C'est une alternative à l'utilisation de `ssh-keygen` dans le terminal.
Un autre outil qui prend en charge les clés SSH est Passwords and Keys, également connu sous le nom de Seahorse. C'est une application GNOME officielle pour la gestion des clés de chiffrement, dont les clés SSH et les clés PGP. Avec cette application, les utilisateurs peuvent non seulement créer et gérer des clés, mais aussi mettre en cache leurs phrases de passe, afin qu'elles ne doivent pas être saisies chaque fois à nouveau. Seahorse peut aussi se connecter à des serveurs de clés pour publier ou récupérer des clés PGP. L'application est disponible via Flatpak et fonctionne sous les licences GPL-2.0+ et LGPL-2.0+.
Pour les personnes qui gèrent beaucoup de serveurs, il existe des outils comme SSH Pilot et Projectpad. SSH Pilot est un gestionnaire de connexions SSH convivial avec une interface à onglets, un terminal intégré, la prise en charge de SFTP et SCP pour le transfert de fichiers, et des fonctions comme le transfert de ports et le transfert de clés. Il fonctionne avec les configurations SSH existantes de `~/.ssh/config` et est conçu comme une alternative moderne à des programmes comme PuTTY ou MobaXterm. Il prend en charge la génération et le transfert de clés SSH, ce qui simplifie la gestion de l'accès à plusieurs serveurs.
Projectpad s'adresse spécifiquement aux développeurs de logiciels et aux administrateurs système qui doivent gérer des identifiants secrets et des informations de serveur. Il stocke les mots de passe et les clés SSH en toute sécurité et permet aux utilisateurs d'exécuter des commandes sur des machines locales ou externes, d'ouvrir des terminaux via SSH, et de gérer des fichiers journaux ou des bases de données. Il offre une manière organisée de conserver les informations de serveur, les applications et les données d'accès, sans que des données sensibles soient stockées sans protection.
Il existe également des outils axés sur les audits de sécurité et les tests de sécurité SSH. SSH-MITM est un programme Linux qui agit comme un serveur SSH « man in the middle », destiné à la réalisation d'audits de sécurité et à l'analyse de malwares. Il peut prendre en charge l'authentification par mot de passe et par clé publique. SSH-MITM détecte si un utilisateur est capable de se connecter avec une clé SSH et, le cas échéant, peut accepter la même clé que le serveur cible. Si l'authentification par clé n'est pas possible, il retombe sur l'authentification par mot de passe. Cela le rend adapté à l'analyse des méthodes d'authentification et à l'identification des vulnérabilités.
John the Ripper CE est un autre outil pertinent dans le contexte de la sécurité SSH. Bien qu'il soit surtout connu comme cracker de mots de passe pour les systèmes Unix, il peut aussi casser des clés privées SSH si celles-ci sont protégées par une phrase de passe faible. Cela souligne l'importance d'utiliser des phrases de passe fortes pour sécuriser les clés privées. John the Ripper prend en charge plusieurs systèmes d'exploitation et types de hash, dont les hash LM de Windows et les hash de mots de passe de macOS, et est développé par Openwall.
Bien que les clés SSH soient plus sûres que les mots de passe, elles ne sont pas infaillibles. Si une clé privée est volée et n'est pas protégée par une phrase de passe forte, un attaquant peut sans problème accéder à tous les serveurs où la clé publique correspondante est installée. C'est pourquoi il est crucial de stocker les clés privées en lieu sûr, par exemple sur un disque chiffré ou un jeton matériel comme une YubiKey. En outre, les clés publiques plus anciennes ou inutilisées doivent être régulièrement supprimées du fichier `authorized_keys` sur les serveurs, afin de réduire la surface d'attaque.
En résumé, une clé SSH est un mécanisme d'authentification puissant et sûr pour se connecter aux serveurs. L'utilisation d'une paire de clés plutôt qu'un mot de passe réduit le risque d'attaques par force brute et permet l'automatisation. Des outils comme ssh-keygen, Keymaker, Seahorse, SSH Pilot et Projectpad simplifient la gestion de ces clés, tandis que des outils d'audit comme SSH-MITM et John the Ripper aident à tester et à améliorer la sécurité. Le cœur du système reste toutefois la séparation stricte entre la clé privée, qui doit rester secrète, et la clé publique, qui peut être partagée en toute sécurité.