Ssh avec des clés asymétrique

De knowledge
Aller à la navigation Aller à la recherche

Pour se connecter en ssh sur un serveur distant la méthode la plus simple est de rentrer son login et son mot de passe. Ca corresponds a la plupart des usages mais il y a le problème de stockage des mots de passes. Sachant que l'on doit disposer d'un mot de passe distinct par ressource ça en fait une grosse quantité à mémoriser. D'autre part le besoin de se connecter d'une machine à une autre (un script sur la machine "A" qui veut lancer une commande sur la machine "B").

On peut rentrer le mot de passe "en dur" dans la script mais, au niveau sécurité, ce n'est pas l'idéal.

La solution des clés résout pas mal de ces problèmes.

  • On se passe de mot de passe.
  • On peut, du côté du serveur, choisir qui peut se connecter un peut comme si chacun avait un mot de passe différent.
  • On peut, sur le serveur, dénier l'acces à une clé sans bloquer le compte lui même.

Configuration

Côté client

On doit définir pour chaque client souhaitant accéder à un ou plusieurs serveurs un paire de clés. (on a parlé du concept ici dans ce Wiki)

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/jpinon/.ssh/id_rsa):
Created directory '/home/jpinon/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/jpinon/.ssh/id_rsa
Your public key has been saved in /home/jpinon/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:fRKRbsNf7U7kFQeKXQSrL4pDeTweCDP6S5ChvqKyYC8 jpinon@PC-JEAN
The key's randomart image is:
+---[RSA 3072]----+
|          ...o+. |
|          .+ + ..|
|  .      +o +  .o|
| . o+    .=o  . +|
|. o. . +S.+o.. +.|
|. ..  + =  +.   +|
|.o ... o o. .  o |
|=Eo.. .o.. .    .|
|*o.......        |
+----[SHA256]-----+

Il est posé trois question. Répondre par "<Entrer>" (si vous n'avez pas confiance lisez le texte).

Cette commande ajoute deux fichiers dans le répertoire ".ssh".

Un fichier id_rsa.pub qui contient la clé publique:

ssh-rsa 
AAAAB3NzaC1yc2EAAAADAQABAAABgQDO1T2F5diqIpyFkHBmJz7VRrJTlWlGrtk80/Uqq4r23D3QUo89bLVrCMERzjvVszA7s4K6nHGDHPRd
ndz5SyB+bAwhg7dOhu3LHttBwd6zQjc8eQDRS2CdnpqgZraTvqOiO5/nD1scOcT01SlZ3I71Cl7PiuZ2dXrQ6k/5IUidFRD0gqAxd3DMbwOk
Kjm8AMqm6ovLj5hgHGNXBxIWqIaMmHTD9VSbcqkY9UhNtHvPL/PBWRXvjh4HONQzuHg+0obQbaRRiH4TwMoEMlsH/eiWgHaS8Cub7TBevDzy
kSBNRYQGriIPHqDwwPRE/QnDGZlPkSDbwEY1KoyOiIxDWo9qc7c/KR2GcFbjfoHQGmFDnsxpjKUgVxrp5ZL/vcu7mCrHYDEUOvJrDnTv1dqG
Xxau7XP1U7mjFsd4BL/3VO4z4fCmKhxIn1HdRB9WVBlFVX7NUmXKYwQ+4QrWeOZ1x2gU+qBNpSgDOM6mROHslZeUtoRYoodJ9flI5+UNN9gf
bK0= user@machine

Le "user@machine" authentifie le client, on pourra le changer côté serveur. le fichier id_rsa contient la clé privée.

-----BEGIN OPENSSH PRIVATE KEY-----
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
-----END OPENSSH PRIVATE KEY-----

Ca ressembla à ça. N'y croyez pas trop c'est un clé générée pour la rédaction de la page elle n'existe plus et n'a surtout jamais été installé sur aucun serveur.

Maintenant il faut faire parvenir la clé publique id_rsa.pub au possesseur du compte sur le serveur où l'ou souhaite le se connecter.

Probablement c'est... vous sur le compte où vous vous connectez actuellement en ssh avec login password.

$ scp .ssh/id_rsa.pub joe@test.pinon-hebert.fr:.
joe@test.pinon-hebert.fr's password:
id_rsa.pub

Ca demande le mot de passe... encore un petit effort.

Côté serveur

On se connecte sur le serveur (probablement la dernière fois que vous utilisez le mot de passe pour cela).

Le fichier id-rsa.pub doit se trouver à la racine de votre compte. (étape précédente).

Dans le répertoire .ssh (toujours le même mais celui du serveur) on doit déja trouver un fichier authorized_keys.

-rw-rw-r-- 1 jpinon jpinon 1349 Dec 18 00:26 authorized_keys

SI il n'y est pas ce n'est pas grave la commande suivante va en créer un.

Vérifiez que le fichier à la racine soit bien votre clé publique.

cat id_rsa.pub

Doit donner le même fichier que celui crée côté client (sinon vous vous êtes pris la pieds dans le tapis quelque part...)

On l'ajoute dans la liste des clés autorisées par :

cat id_rsa.pub >> .ssh/authorized_keys

Attention il faut vérifier que le fichier authorized_keys soit bien en lecture seule pour les users "other" :

-rw-rw-r--

Si ce n'est pas le cas un simple chmod suffit:

chmod 644 .ssh/authorized_keys

Maintenant vous pouvez vous loguer depuis le client (sous l'utilisateur qui a généré les clés) sur le serveur (sous l'utilisateur où on a enregistré la clé dans authorized_keys).

Gestion / révocation des clés.

Imaginez que l'on vous dérobe le PC avec lequel vous accédez à votre serveur. Le voleur va disposer de votre clé privée (si il est mal configuré au niveau sécu mais c'est une autre affaire).

Il suffit de révoquer sa clé sur le serveur. Pour cela il faut éditer le fichier .ssh/authorized_keys:

vi .ssh/authorized_keys

Authorized keys.png

Chaque clé commence par "ssh-rsa" et se termine par le nom qui identifie le propriétaire de la clé. (que vous pouvez modifier sur votre serveur pour identifier le proprietaire de la clé).

Si je veux supprimer ma clé qui autorise mon accès depuis mon vieil eeepc par exemple je supprime la seconde ligne et hop plus d'accès pour jpinon sur eeepc.