alogin – outil de gestion des connexions SSH avec TUI, passerelle multi-sauts et stockage chiffré (Go)
(github.com/emusal)Depuis le début des années 2000, je créais et utilisais pour mon usage personnel des outils d’automatisation SSH en Bash + scripts Expect.
Après 20 ans de correctifs, je les ai finalement entièrement réécrits en Go et publiés en open source.
https://github.com/emusal/alogin2
Problème de départ : quand on gère des dizaines de serveurs avec des utilisateurs, ports, chemins de passerelle et identifiants tous différents, je voulais pouvoir travailler confortablement sans retaper à chaque fois les noms d’hôte en entier ni stocker les mots de passe en clair.
Fonctionnalités principales :
- TUI (Bubbletea) avec recherche fuzzy — inutile de taper le nom d’hôte en entier
- Implémentation de passerelles multi-sauts en SSH natif Go (
ProxyCommandnon requis, pas d’expect).
SiAllowTcpForwardingest désactivé sur un saut intermédiaire, bascule automatique vers le chaînage de shell - Stockage chiffré des identifiants — les mots de passe sont conservés dans le trousseau macOS / Linux Secret Service / des fichiers chiffrés avec
age. Ils ne sont jamais enregistrés dans la base SQLite - Sessions de cluster — connexion simultanée à N serveurs avec tmux, iTerm2 et Terminal.app
- Web UI — terminal xterm.js basé sur WebSocket + tableau de bord d’administration des serveurs (
alogin web) - Shim shell — les commandes
t,r,s,f,mdes scripts existants restent utilisables telles quelles avec une seule ligne desource
Stack utilisée : Go 1.23, Bubbletea, golang.org/x/crypto/ssh, chi, xterm.js (React)
La partie la plus intéressante de l’implémentation a été le SSH multi-sauts.
golang.org/x/crypto/ssh permet de lancer le dial du saut suivant au-dessus d’une session existante, ce qui rend possible un chaînage sur N sauts sans processus séparé. La partie délicate, c’était lorsque le bastion intermédiaire bloquait le transfert TCP — il a fallu mettre en place une logique de repli qui détecte l’échec pendant le dial et bascule vers une méthode de chaînage par shell.
Questions sur l’implémentation et retours bienvenus.
4 commentaires
Il n’y a pas de prise en charge de Windows ? :(
Je n’ai pas pu l’essayer, faute d’environnement Windows.
Ce serait bien d’avoir des captures d’écran de l’utilisation.
J’ai ajouté une capture d’écran au README. Merci pour le conseil.