4 points par emusal 2026-03-22 | 4 commentaires | Partager sur WhatsApp

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 (ProxyCommand non requis, pas d’expect).
    Si AllowTcpForwarding est 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, m des scripts existants restent utilisables telles quelles avec une seule ligne de source

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

 
nokdu 2026-03-22

Il n’y a pas de prise en charge de Windows ? :(

 
emusal 2026-03-22

Je n’ai pas pu l’essayer, faute d’environnement Windows.

 
runableapp 2026-03-22

Ce serait bien d’avoir des captures d’écran de l’utilisation.

 
emusal 2026-03-22

J’ai ajouté une capture d’écran au README. Merci pour le conseil.