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