Connexion par SSH avec PKI
Cette documentation est basée sur cette page
Principe de fonctionnement
La mise en place d'une connextion par PKI (Public Key Infrastructure) sur openssh permet d'enlever le besoin de téléverser chaque clef de chaque administrateur sur l'ensemble des serveurs. Comment cela fonctionne-t-il ?
Autorité de certification
Déploiement sur les machines
Afin de permettre la connexion par PKI, il faut mettre la clef publique de l'autorité de certification dans les machines.
On la copie-colle dans un fichier que l'on nomera /etc/ssh/user_ca.pub
:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIF9o4QA3vCBx53mQZq2Wg3FBzAuDYCP1AgfwbAZaq3zy User Certificate Authority for rhizome-fai.net
et dans le fichier /etc/ssh/sshd_config
, on ajoute la ligne suivante :
TrustedUserCAKeys /etc/ssh/user_ca.pub
Et voilà, c'est tout !
Signature d'une nouvelle clef
Pour qu'un administrateur puisse avoir accès au machine, il doit avoir un certificat associé à sa clef SSH. En gros, c'est un fichier signé par l'autorité de certification qui indique que la clef privée de l'utilisateur est autorisée sur les machines !
Ainsi, au lieu d'avoir à pousser la clef publique sur toutes les machines, il suffit que l'administrateur ait le certificat sur sa machine ! Une fois celui-ci présent, il suffit "d'envoyer" le certificat lors de la connexion pour que le serveur l'accepte ! (voir ci-après).
Génération d'un certificat
Pour générer un certificat, il faut être en possession de la clef privée de l'autorité de certification. Cette clef privée doit restée très sécurisée: faire fuiter la clef, c'est permettre l'accès à toutes les machines qui font confiance à cette autorité de certification.
La commande à utiliser pour signer la clef est ssh-keygen
avec l'option -s
(comme "sign"). Il est possible (et recommandé) d'associer une limite de validité à ce certificat avec l'option -V
.
Par exemple, pour créer un certificat valide 1 an (52 semaines), permettant de se connecter avec l'utilisateur huetremy, on utilise la commande :
ssh-keygen -s user_ca -V ":+52w" -I "rhizome-fai.net CAv1 huetremy" -n huetremy id_ed25519.pub
si la clef de certification est user_ca
et la clef publique à signer id_ed25519.pub
.
C'est bien la clef publique que l'on signe !!! De manière générale, ne donnez JAMAIS votre clef privée à QUI QUE CE SOIT.
L'option -I
permet d'ajouter "l'identité" du certificat. Il n'y a pas de format requis, mais c'est une bonne idée d'essayer de tous les faire de la même façon, afin que l'on puisse savoir facilement via les logs de sshd quel a été le certificat utilisé pour une connexion.
Une fois le certificat généré, il faut l'envoyer à l'administrateur concerné.
Connexion avec certificat
En admettant être en possetion d'un certificat nommé huetremy-rhz-cert.pub
, il est possible de se connecter en ssh aux machines (par exemple, mercure.rhizome-fai.net
) avec la commande suivante :
ssh -o CertificateFile=huetremy-rhz-cert.pub mercure.rhizome-fai.net
Pour ne pas avoir besoin du paramètre -o ...
il suffit d'ajouter Mercure dans son fichier .ssh/config
, ce qui est une bonne pratique dans tout les cas :
Host mercure mercure.rhizome-fai.net
HostName mercure.rhizome-fai.net
Certificate /home/huetremy/.ssh/huetremy-rhz-cert.pub
Machines configurées
- ns01
- g1.garage
- g2.garage