SSH - Authentification par clé
L'authentification de base pour se connecter en SSH à un ordinateur s'effectue avec un nom d'utilisateur et un mot de passe. Outre le côté rébarbatif de devoir systématiquement ce mot de passe, cela entrave la bonne exécution de tâches automatisées à distance, telle qu'une sauvegarde quotidienne sur une machine distante par exemple. La sécurité est vraiment accrue car la passphrase seule ne sert à rien sans la clé privée, et vice-versa.
Pour ces raisons entre autres, il est nécessaire de s'authenfier à l'aide d'une clé SSH au lieu d'un mot de passe.
En résumé, on va créer une clé sur chaque serveur et échanger les clés de chacun afin qu'ils puissent s'authentifier entre eux par ce moyen.
L'authentification par clé fonctionne grâce à 3 composants :
- Une clé publique : elle sera exportée sur chaque hôte sur lequel on souhaite pouvoir se connecter.
- Une clé privée : elle permet de prouver son identité aux serveurs.
- Une passphrase : Permet de sécuriser la clé privée (notons la subtilité, passphrase et pas password... donc « phrase de passe » et non pas « mot de passe »).
Génération des clés privée et publique
Sous Linux
Lancer la commande suivante pour générer la paire de clés qui permettra à l'utilisateur qui lance cette commande de s'authentifier avec elles.
2 fichiers seront générés dans le dossier /home/utilisateur/.ssh de l'utilisateur ayant lancé la commande :
- Nom_du_serveur : contient la clé privée et ne doit pas être dévoilé ou mis à disposition
- Nom_du_serveur.pub : contient la clé publique. C'est elle qui sera mise sur les serveurs dont l'accès est voulu.
S'assurer que les bonnes permissions sont accordées sur le répertoire ~/.ssh/
et sur la clé générée.
Seul le propriétaire du répertoire doit pouvoir y écrire et lire la clé privée.
Lancer la commande suivante pour appliquer ces droits.
Sous Windows
Parmis les méthodes disponibles pour générer une paire de clés privée et publique sous Windows, il est possiblde d'utiliser PuttyGEN.
Page de téléchargement
Il suffit de cliquer sur Generate, de bouger la souris pour générer un mouvement aléatoire, renseigner les commentaires (à ne pas négliger pour s'y retrouver !), de mettre un mot de passe OU PAS !, puis de sauvegarder la clé privée (à l’abri pour ne pas risquer une usurpation d'identité) et la clé publique.
Copier également le texte visible dans la boite de dialogue dans un fichier texte pour plus tard.
Si nous choisissons d'indiquer un mot de passe, nous aurons donc 2 couches de sécurité : Le mot de passe ET l'échange de clés avec le serveur distant. Cependant, cela complexifiera les mécanismes automatisés (scripts, tâches planifiées).
Pour cette raison, on peut se satisfaire de l'échange de clés comme unique méthode d'authentification.
Précaution !
Sans mot de passe, il est primordial de déposer la paire de clé dans un répertoire auquel seul l'utilisateur aura accès.
Envoyer sa clé publique sur la machine Linux distante
Il s'agit ici d'ajouter sur le serveur Linux distant notre clé publique à la liste des clés autorisées à se connecter.
La clé sera ajoutée dans le fichier ~/.ssh/authorized_keys
.
Depuis une machine Linux
Nous utiliserons ssh-copy-id
pour envoyer notre clé publique avec la commande suivante :
Echange bilatéral
Il est parfois pratique de disposer d'un échange dans les 2 sens. Pour cela, procéder de même depuis le serveur distant vers le serveur local.
Depuis une machine Windows
Lorsque nous avons généré des clés avec Puttygen, nous avons copié la clé publique dans un fichier texte ressemblant à ceci :
ssh-rsa AAAAB3NzaC1yc2ERMC8zSF/ [...] qJpjoWALGQ== Ma description
Il faut éditer le fichier ~/.ssh/authorized_keys
sur la machine Linux distante pour y ajouter notre clé publique.
Se connecter avec ces clés
Depuis Linux
Il est possible de spécifier la clé à utiliser pour la connexion à l'hôte distant avec la commande suivante :
Cependant, le plus pratique est de modifier le fichier ~/.ssh/config
en y ajoutant la configuration à utiliser pour se connecter à une cible.
Host monserveur_distant.fr
HostName monserveur_distant.fr
User mon_utilisateur
Port 22
IdentityFile /home/mon_utilisateur/.ssh/La_clé_privée
Depuis Windows
Avec VSCode
Ajouter les extensions Remote - SSH
, Remote - SSH: Editing Configuration files
et Remote Explorer
pour permettre à VSCode de se connecter à des hôtes distants en SSH, de pouvoir éditer le fichier de configuration associé et pouvoir naviguer dans l'arborescence distante.
Remote - SSH: Editing Configuration files
présente l'intérêt de rester dans VSCode pour configurer l'accès SSH à des machines distantes. Cependant, il ne s'agit que d'un raccourci pour éditer le fichier %userprofile%\.ssh\config
.
Contenu de ce fichier pour configurer l'utilisation d'une clé afin de se connecter à un hôte :
Host domain.fr
HostName domain.fr
User username_to_modify
IdentityFile "C:\Users\user\My_defined_folder\My_key"
Il se peut que le format de la clé ne convienne pas... Il faut alors recharger la clé dans PuttyGen et utiliser le menu Conversions > Export OpenSSH key.
Avec Putty
Dans Putty, chercher l'option Connection > SSH > Auth > Credentials et indiquer le chemin vers la clé privée.
Dans un terminal
Ouvrir une invite de commande (cmd) ou PowerShell puis lancer la commande suivante :