Principes de base de l'utilisation de clés SSH.
Génération, utilisation et cas pratiques d'utilisation de clés SSH.
- Pré-requis
- TL;DR
- Génération d'une paire de clés
- Se connecter à un serveur distant
- Compléments
- Aller plus loin avec les sources
Une clé SSH est un moyen d'authentification vers un serveur SSH reposant sur les principes de cryptographie asymétrique et d'authentification défi / réponse.
Elle a deux avantages fondamentaux comparativement avec une authentification par couple identifiant/mot de passe:
- Permettre une authentification facilité (plus de mot de passe à mémoriser) et plus rapide (possibilité de rebond de serveur à serveur par exemple).
- Se prémunir des attaques de type force brute
La très grande majorité des accès serveurs sont aujourd'hui basés sur leur utilisation, au dela de l'aspect fluidité et sécurité, elle ouvre également la possibilité d'authorisation multiple (sur plusieurs serveurs), de révocation et de signature des accès facilités.
Secure Shell (SSH)
Secure Shell (SSH) est à la fois un programme informatique et un protocole de communication sécurisé. Le protocole de connexion impose un échange de clés de chiffrement en début de connexion. Par la suite, tous les segments TCP sont authentifiés et chiffrés. Il devient donc impossible d'utiliser un sniffer pour voir ce que fait l'utilisateur. Le protocole SSH a été conçu avec l'objectif de remplacer les différents protocoles non chiffrés comme rlogin, telnet, rcp et rsh.
Pré-requis
- Avoir un client SSH installé (OpenSSH pour Linux/OSX et Windows à présent ou encore Putty pour Windows)
- Une ligne de commande ( le truc noir dans lequel on tape du texte ;) )
TL;DR
Génération d'une paire de clés:
ssh-keygen -t ed25519 -a 150
Se connecter à un serveur distant
ssh -i ~/.ssh/id25519 user@server_address
Génération d'une paire de clés
Le principe de l'authentification par clés repose, comme explicité sur les différents liens ci-dessus, par la création d'une paire de clés asymétriques. L'une de ces clés sera votre clé publique à déployer sur les machines auxquelles vous avez le droit de vous connecter, l'autre, votre clé privée. Et comme son nom l'indique, celle-ci est à vous et rien qu'à vous ; elle ne se partage pas. JAMAIS.
Deux notions de base avant de se lancer pour bien comprendre ce que l'on fait:
- Il existe plusieurs types d'algorithmes de signature numérique, les plus répandus étant RSA et Ed25519;
- Il est possible de spécifier la longueur de vos clés, ce paramètre est essentiel à leur robustesse.
Il est recommandé, à la date de rédaction de cet article, d'utiliser l'algorithme Ed25519 qui a plusieurs avantages comparativement à RSA:
- Robustesse accrue;
- Plus petite taille de clés;
- Génération des clés plus rapide.
ssh-keygen -t ed25519 -a 150 -C "courriel@example.com"
L'option -C
permet d'ajouter un commentaire à votre clé, pratique notamment pour identifier le propriétaire d'une clé publique coté serveur.
Phrase de passe
Bien que facultative, il est « extrêmement vachement recommandé » de disposer d'une phrase de passe sur vos clés SSH (dans le cadre des cours et pour gagner du temps il est possible de s'en passer si vous n'utilisez pas votre clé en dehors de ceux-ci).
Cette commande vous aura généré deux fichiers dans le répertoire ~/.ssh/
(sauf si vous l'avez modifié bien évidemment):
id_ed25519.pub
(comme son extension l'indique c'est votre clé publique);id_ed25519
votre clé privée (on remarquera les droits qui lui sont appliqués0600
, en effet seul votre utilisateur doit y avoir accès).
Générer une clé RSA
Ed25519 n'étant de temps en temps pas supporté (surtout par les anciens systèmes) il est parfois nécessaire de générer une paire de clé RSA (on remarquera la longueur de clé de 4096 bits recommandée à date de rédaction de l'article):
ssh-keygen -t rsa -a 150 -b 4096
Se connecter à un serveur distant
C'est un peu la finalité.
Imaginons un serveur pour lequel votre clé est autorisée à se connecter (pour rappel fichier authorized_keys
), nous pouvons initier une connexion à l'aide de la commande:
ssh user@server_address
Cette commande aura donc pour effet « d'ouvrir » une connexion sur un serveur distant via le protocol SSH vous permettant de saisir des lignes de commande directement sur ce serveur et donc de l'administrer.
Cette exemple montre l'ouverture d'une session avec l'utilisateur debian
sur le serveur ayant pour adresse IP 146.59.243.95
.
Plusieurs choses à retenir à cette étape:
- Par défaut ssh parcourt les clés SSH privées disponibles dans le répertoire
~/.ssh
afin de les proposer au serveur auquel vous essayez de vous connecter. - Vous optenez en retour la première fois que vous vous connectez un message vous demandant de confirmer la connexion vers le serveur distant (Host key checking).
Compléments
Si vous disposez de plusieurs clés SSH et que vous ne souhaitez pas que l'ensemble de vos clés privées soient soumises au serveur distant vous pouvez spécifier quelle clé utiliser en utilisant l'option -i
.
ssh -i ~/.ssh/id25519 debian@146.59.243.95
Il est possible d'utiliser des syntaxes différentes en fonction de votre fichier de configuration SSH.
Vous pouvez ainsi agir sur les comportements par défaut de votre client SSH et notamment sur la clé à utiliser en fonction de tel ou tel serveur.
Une typo ? Modifier cet article sur Github