{{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]]