{{tag>ssh}}
====== Centraliser les accès ssh [Déprécié]======
Se référer à [[services:ssh_configuration_for_proxmox_vm|]]
{{ ..:authserver.png }}
La  manière classique  d'autoriser  l'accès aux  serveurs  en SSH  est
d'ajouter   la   clés   publiques  des   utilisateurs   aux   fichiers
''~/.ssh/authorized_keys'' de chaque serveur.
L'augmentation du nombre de serveurs et  de clés à autoriser crée bien
sûr un problème d'[[https://fr.wikipedia.org/wiki/Extensibilit%C3%A9|extensibilité]].
Plusieurs solutions  existent pour adresser  le problème, comme  [[https://docs.ansible.com/|Ansible]] et
d'autres solutions d'orchestration ou  bien simplement des scripts faits
maison.
Ces solutions présentent toutefois  l'inconvénient de devoir maintenir
constamment et  à portée  de main  une banque  des clés  publiques des
utilisateurs quelle que soit la machine d'où on opère.
L'application [[https://git.elosys.net/sys/auth_server.git|auth_server]] résoud ce dernier problème en sauvegardant
les clés publiques sur le serveur d'authentification.
Ci-dessous, le contenu du fichier ''README.org'' du dépot :
===== Serveur d'accès ssh centralisé =====
==== Pour l'impatient ====
''kk''
Affiche un tableau listant les serveurs, les clés (et les groupes de clés) autorisées pour chaque serveur.
----
''kk server add monserveur''
Ajoute un nouveau serveur ''monserveur''
----
''kk key add  [nom]''
Ajoute la clé du fichier ''id_rsa.pub'' au serveur de clés
Si [nom] n'est pas indiqué le nom de la clé sera le commentaire habituellement trouvé à la fin de clé.
Exemple, avec une clé dont le contenu est :
''ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCoY3PXIAtJLRk5EU7kfST0BIaiTmp6iVtDKZm......... gus@debian''
''kk key add ''
Ajoutera la clé nommée ''gus@debian''
----
''kk server addkey gus@debian  --to monserveur''
Autorisera la clé ''gus@debian'' sur le serveur ''monserveur''
===== Présentation générale =====
==== Configuration des serveurs clients ====
Le serveur openssh-server peut être configuré pour exécuter une commande afin récupérer la liste des clés aurtorisées.
Avec la configuration suivante dans ''/etc/ssh/sshd_config'' le serveur ssh exécutera la commande ''/bin/get_athorized_keys''
pour récupérer les clés publiques autorisées. (pour plus d'informations sur cette configuration et sur ses arguments
''man sshd_config'')
AuthorizedKeysCommandUser nobody
AuthorizedKeysCommand /bin/get_authorized_keys
''/bin/get_authorized_keys'' a le contenu suivant:
#!/bin/bash
timeout 1 curl https://keys.elosys.net/$(hostname -s)
==== Le serveur de clés ====
''/bin/get_authorized_keys'' envoie une requête au serveur de clés répondant sur ''keys.elosys.net'' pour lui fournir la liste des clés
autorisées à son nom (''hostname -s'')
Le serveur  de clés  est implémenté  en Perl  (à l'aide  du framework Dancer2)  interfacé  avec une  base  de  données sqlite3.  Le  projet
comporte également  la CLI pour  l'ajout et l'effacement des  clés et  des serveurs.
Le projet est donc divisée en 2 parties :
  * Le serveur de clé publiques
  * L'interface en ligne de commande pour faciliter l'ajout et l'effacement des serveurs, des clés et des groupes de clés.
===== Implémentation =====
Le code du serveur se trouve dans le dossier ''cgi/''
L'accès aux fonctionnalités de gestion des clés sur le serveur est restreint avec un TOKEN et limité par IP. (Voir ''cgi/app.psgi'')
L'accès aux clés publiques n'est pas restreint.
Un fichier ''.env'' devrait contenir la variable  KEYSERVERTOKEN qui sera déployées à l'intérieur de l'application.
L'interface en ligne de commande devra utiliser cette varible pour communiquer avec le serveur et gérer les serveurs et les clés.
==== Autres pistes ====
  * [[system_administration:security:ssh_certificates|SSH Certificates]]