ASSH simplifie la configuration du client SSH
Aujourd’hui, je vais vous parler d’un outil qui va vous permettre de simplifier la configuration de vos clients SSH. Cet outil s’appelle ASSH, pour Advanced SSH Config. ASSH est un wrapper pour SSH qui permet de gérer de manière dynamique et avancée les configurations SSH.
Les configurations SSH standard peuvent vite devenir complexes et difficiles à gérer, surtout dans des environnements avec de nombreux serveurs. ASSH propose une solution à ce problème en introduisant une couche d’abstraction.
Fonctionnement d’ASSH
Plongeons maintenant dans les concepts clés d’ASSH pour mieux comprendre comment cet outil enrichit l’expérience SSH. ASSH n’est pas juste un wrapper ; c’est une réinvention intelligente de la façon dont nous interagissons avec SSH.
ASSH fonctionne en s’intercalant entre votre client SSH et vos connexions
SSH. Il intercepte les commandes SSH et les manipule selon les configurations
spécifiées dans votre fichier ~/.ssh/config
. Cela permet une grande
flexibilité et une personnalisation approfondie de vos connexions.
Le cœur d’ASSH repose sur deux composants principaux :
- Le Parser de Configuration : ASSH lit et interprète le fichier de configuration SSH. Il ajoute une couche supplémentaire de fonctionnalités tout en respectant la syntaxe et les fonctionnalités de base du fichier SSH original.
- Le Proxy SSH : Lorsqu’une connexion SSH est initiée, ASSH agit comme un proxy. Il peut modifier dynamiquement les paramètres de connexion, répartir la charge entre plusieurs hôtes, ou même rebondir à travers plusieurs serveurs pour atteindre la destination finale.
L’un des aspects les plus puissants d’ASSH est sa capacité à gérer des configurations complexes avec simplicité. Par exemple, vous pouvez configurer des connexions à travers des serveurs proxy, définir des règles de reconnexion automatique, ou même gérer des groupes d’hôtes avec des configurations similaires.
Avec ASSH, vous avez la possibilité de définir des règles avancées pour chaque hôte ou groupe d’hôtes dans votre fichier de configuration. Ces règles peuvent inclure :
- Balancing et Failover : Répartir les connexions entre plusieurs hôtes pour équilibrer la charge ou fournir une redondance.
- Chaining et Jump Hosts : Connectez-vous à un hôte via un ou plusieurs intermédiaires, ce qui est particulièrement utile dans des environnements complexes ou sécurisés.
- Hooks Personnalisés : Exécutez des scripts ou des commandes spécifiques à différents moments de votre connexion SSH, comme avant la connexion, après la déconnexion, etc.
Installation d’ASSH
Que vous soyez sous Linux, macOS ou Windows, le processus d’installation est conçu pour être aussi simple que possible. ASSH est facilement installable via les gestionnaires de paquets courants. Par exemple, sous macOS, vous pouvez utiliser Homebrew :
Sous Linux, le processus peut varier légèrement en fonction de votre distribution, mais ASSH est généralement disponible via les gestionnaires de paquets standard.
ASSH peut aussi être installé avec asdf-vm :
Les Fichiers de Configuration ASSH
Après avoir installé ASSH, il est essentiel de comprendre comment sont définis les fichiers de configuration. Mais avant cela pour ceux qui ne maitrisent pas trop ce fichier de configuration voici un rappel.
Rappel sur les configurations SSH
Le fichier ~/.ssh/config
est un fichier texte standard qui définit les
paramètres pour les connexions SSH. Ce fichier peut inclure des informations
comme les noms d’hôte, les adresses IP, les noms d’utilisateur, les ports et
d’autres options de configuration.
Voici un exemple de ce à quoi pourrait ressembler une entrée de base dans ce fichier :
Dans cet exemple, monserveur
est un alias pour la connexion SSH au serveur
monserveur.example.com
. Ce fichier spécifie également le nom d’utilisateur, le
port et le fichier d’identité SSH à utiliser pour cette connexion.
Dans cet exemple, *.example.com
est un modèle pour la connexion SSH aux
serveurs dont le nom de domaine se termine par .example.com
. Ce modèle
spécifie également le nom d’utilisateur, le fichier d’identité SSH et les
paramètres de connexions à utiliser pour cette connexion.
Pour plus d’informations vous pouvez vous rendre sur ce guide.
Construction du fichier de configuration ASSH
ASSH utilise son propre fichier de configuration, nommé .assh.yml
, pour
construire le fichier SSH. Dans ce fichier de configuration assh y ajoute ses
propres options et fonctionnalités. Par exemple, avec ASSH, vous pouvez
définir des modèles pour des configurations communes, utiliser des hooks pour
déclencher des actions spécifiques et bien plus encore.
Voyons cela en détail avec un premier exemple assez simpliste :
Dans cet exemple, on1.robert.local
se connectera avec l’utilisateur bob.
Génération de la configuration SSH
La première chose à faire avant de démarrer quoi que ce soit, c’est de sauvegarder le fichier actuel :
Pour construire ou mettre à jour votre fichier de configuration SSH, utilisez la commande suivante :
Cette commande permet à ASSH de générer un fichier de configuration SSH enrichi, prenant en compte les fonctionnalités avancées d’ASSH.
Voici le contenu généré avec le fichier ci-dessus :
Si vous lisez bien le wrapper assh
est utilisé à chaque invocation de la
ssh
.
Validation de l’installation
Pour vérifier que tout est en ordre, vous pouvez tester votre configuration en établissant une connexion SSH à un de vos serveurs :
Si la connexion est réussie, ASSH est correctement installé et configuré !
Configuration avancée d’ASSH
Les Paramètres par Défaut
Les paramètres par défaut dans ASSH servent de configuration de base pour tous les hôtes qui ne spécifient pas explicitement certains paramètres. Cela est particulièrement utile dans les environnements avec de nombreux serveurs, car cela permet de maintenir une configuration uniforme et centralisée.
Pour configurer les paramètres par défaut dans ASSH, vous devez définir une
section defaults
dans votre fichier. Voici un exemple de configuration des
paramètres par défaut :
Dans cet exemple, tous les hôtes hériteront de ces paramètres par défaut, à moins qu’ils ne soient redéfinis dans la configuration spécifique de l’hôte.
Bien que les paramètres par défaut soient appliqués à tous les hôtes, vous pouvez toujours les surcharger pour des hôtes spécifiques. Par exemple :
Dans ce cas, specialserver
utilisera un utilisateur et un port différents de
ceux définis dans les paramètres par défaut.
Les Templates
Un template dans ASSH est une sorte de modèle de configuration qui peut être
appliqué à plusieurs entrées de votre fichier ~/.ssh/config
. Cela vous permet
de définir une configuration de base et de la réutiliser pour différents hôtes,
en évitant ainsi la redondance et en facilitant la maintenance des
configurations.
Pour créer un template dans ASSH, vous commencez par définir une section
Templates
dans votre fichier de configuration. Par exemple :
Dans cet exemple, my-template
est un template qui définit un paramètre commun
: l’utilisateur.
Pour appliquer ce template à un hôte, référencez simplement le nom du template dans la configuration de l’hôte :
Ici, server1
et server2
héritent tous les deux des paramètres définis dans
my-template
, ce qui garantit une cohérence dans la configuration tout en
réduisant la duplication.
Les hooks
Dans cet exemple, chaque fois que vous vous connectez à proxmox
, une ligne
sera ajoutée au fichier stockant l’historique des connexions.
Il est possible d’utiliser des variables ASSH dans les hooks :
Les principales variables ASSH :
Les includes
Les “includes” permettent de séparer votre configuration ASSH en plusieurs fichiers. Cette approche est particulièrement utile pour gérer des configurations volumineuses ou pour partager des configurations communes entre plusieurs utilisateurs ou systèmes.
Les gateways
Plutôt que de se connecter directement à la cible finale, votre connexion SSH passe d’abord par cette passerelle. Cette méthode est souvent utilisée pour accéder à des serveurs situés dans des réseaux isolés ou sécurisés.
Pour configurer une gateway avec ASSH, vous devez définir cette gateway dans votre fichier de configuration SSH. Voici un exemple de base :
Générons le fichier :
Les autres commandes de la CLI
L’interface en ligne de commande (CLI) d’ASSH offre plusieurs commandes sous
assh config
qui permettent de gérer efficacement vos configurations SSH. Ces
commandes permettent de construire, visualiser et manipuler la configuration de
manière avancée.
Visualisation Graphique des Hôtes
La commande assh config graphviz
génère une représentation graphique de vos
hôtes et de leurs relations, au format Graphviz.
Cela peut être extrêmement utile pour visualiser des configurations complexes, en particulier lorsque vous avez des dépendances ou des relations entre différents hôtes, comme des gateways ou des configurations en cascade.
Sortie au Format JSON
La commande assh config json
fournit une représentation en JSON de votre
configuration. C’est une fonctionnalité utile pour l’intégration avec d’autres
outils ou pour un traitement automatisé.
Cela peut servir à analyser et traiter votre configuration SSH dans des scripts ou des applications qui consomment des données JSON.
Lister Tous les Hôtes
La commande assh config list
est un moyen rapide de lister tous les hôtes
définis dans votre configuration ASSH.
C’est un outil pratique pour obtenir un aperçu rapide de tous vos hôtes configurés, ce qui peut être utile pour la vérification et la gestion de vos configurations.
Faire des Recherches
Enfin, la commande assh config search
permet de rechercher des entrées
spécifiques dans votre configuration en utilisant un texte de recherche.
Usage:
Cette fonction est particulièrement utile lorsque vous travaillez avec un grand nombre d’hôtes et que vous devez trouver rapidement des informations spécifiques.
Conclusion
En parcourant les divers aspects et fonctionnalités d’ASSH, je vous ai fait découvrir comment cet outil révolutionne la manière dont je gére mes configuration SSH. De la configuration initiale et des paramètres par défaut à l’utilisation avancée de templates, gateways et de la CLI, ASSH se révèle être un allié indispensable pour tout administrateur système.
Plus d’infos
- Documentation : pkg.go.dev/moul.io/assh ↗
- Projet GitHub : github.com/moul/assh ↗