sssh — simple-ssh
Un gestionnaire de connexions SSH minimaliste : un nom court par serveur, un TUI pour choisir, et c'est tout.

Fonctionnalités
sssh <nom>se connecte directement — un préfixe unique suffit (sssh ino→inoval)ssshsans argument ouvre un TUI avec filtre instantané- Ajout en une ligne ou via formulaire dans le TUI
- Import de tes hosts existants depuis
~/.ssh/config(multi-sélection interactive ou one-liner) - Support port, clé privée, ProxyJump (qui peut référencer un autre host sssh) et tags
- Export / import pour synchroniser entre machines
- La connexion délègue au
sshsystème (exec) : agent, TTY, config… tout marche comme un ssh normal
Installation
git clone ssh://git@git.neuromancer.ovh:2222/bastien-mrq/sssh.git
cd sssh
go build -o sssh .
mv sssh ~/.local/bin/ # ou n'importe où dans ton PATH
Complétion shell
# fish
cp completions/sssh.fish ~/.config/fish/completions/
# bash — dans ~/.bashrc :
source /chemin/vers/sssh/completions/sssh.bash
# zsh — dans un répertoire du fpath, avant compinit :
mkdir -p ~/.zsh/completions && cp completions/_sssh ~/.zsh/completions/
# puis dans ~/.zshrc : fpath=(~/.zsh/completions $fpath)
La complétion propose les noms de hosts enregistrés et les sous-commandes.
Usage

sssh # TUI de sélection
sssh serveur-1 # connexion directe
sssh serv # préfixe unique accepté
sssh vps-ovh uptime # exécute une commande distante
sssh add vps-ovh debian@203.0.113.21 # ajout en une ligne
sssh add api deploy@192.0.2.7:2222 -i ~/.ssh/id_deploy -J bastion -t client,prod
sssh edit vps-ovh # formulaire d'édition
sssh rm vps-ovh
sssh list
sssh export > hosts.toml # sauvegarde / partage
sssh import hosts.toml # fusionne (--force pour écraser)
sssh import-ssh # importe depuis ~/.ssh/config (interactif)
sssh import-ssh bastion vps # importe ces hosts-là directement
Export, import et synchronisation
sssh export sort l'intégralité de tes hosts au format hosts.toml — le même format que le fichier de config, donc un export est directement réutilisable :
sssh export # affiche le TOML sur la sortie standard
sssh export sauvegarde.toml # écrit dans un fichier
Seuls les hosts gérés par sssh sont exportés ; ceux de ~/.ssh/config (lecture seule) n'en font pas partie.
sssh import fusionne un fichier exporté avec tes hosts existants :
- un nom qui n'existe pas encore est ajouté ;
- un nom déjà présent est ignoré (ta version locale est conservée) ;
- avec
--force, les noms déjà présents sont écrasés par la version du fichier.
sssh import sauvegarde.toml # ajoute les nouveaux, garde le reste
sssh import sauvegarde.toml --force # le fichier fait foi
Synchroniser deux machines
Le plus direct, de machine à machine (sssh sait déjà s'y connecter) :
sssh export | ssh autre-pc "sssh import /dev/stdin"
# ou en deux temps :
sssh export /tmp/hosts.toml && scp /tmp/hosts.toml autre-pc:
Pour une synchro permanente, pointe $SSSH_CONFIG vers un fichier partagé (dossier Syncthing, iCloud, Dropbox…) sur les deux machines, ou versionne ~/.config/sssh/ dans un repo git.
Raccourcis du TUI
| Touche | Action |
|---|---|
↑↓ / jk |
naviguer |
/ puis texte |
filtrer |
entrée |
se connecter |
a |
ajouter un host |
e |
éditer |
d |
supprimer (avec confirmation) |
i |
importer depuis ~/.ssh/config |
q |
quitter |
Configuration
Les hosts vivent dans ~/.config/sssh/hosts.toml (surchargeable avec $SSSH_CONFIG) :
[hosts.serveur-1]
user = "root"
host = "192.0.2.11"
port = 22 # optionnel
identity = "~/.ssh/id_prod" # optionnel
jump = "bastion" # optionnel — nom sssh ou [user@]host[:port]
tags = ["client", "prod"] # optionnel
C'est un simple fichier : pour synchroniser deux machines, copie-le, ou versionne ~/.config/sssh/ dans un repo git.
Bastion / ProxyJump
Le champ jump (option -J de sssh add, champ « Jump host » du formulaire) accepte :
- le nom d'un autre host sssh : sa cible réelle (user, IP, port) est utilisée, et si ce host a lui-même un
jump, la chaîne complète est construite (ssh -J hop1,hop2 cible) ; - une spécification ssh brute
[user@]host[:port], passée telle quelle.
sssh add bastion admin@203.0.113.10
sssh add serveur-prive deploy@10.0.4.2 -J bastion
sssh serveur-prive # → ssh -J admin@203.0.113.10 deploy@10.0.4.2
Limite d'OpenSSH : -J ne prend pas de clé par hop ; si un bastion demande une clé spécifique, déclare-la dans ~/.ssh/config (Host bastion + IdentityFile).
Importer depuis ~/.ssh/config
sssh import-ssh liste les alias concrets de ton ~/.ssh/config qui ne sont pas encore dans sssh et te laisse cocher ceux à importer (espace pour sélectionner, ctrl+a pour tout prendre). Les champs supportés sont copiés : HostName, User, Port, IdentityFile, ProxyJump. Avec des noms en arguments, l'import est direct, sans interaction. La touche i dans le TUI fait la même chose.
~/.ssh/config n'est jamais modifié : l'import copie les entrées dans hosts.toml, les originales restent en place.
Développement
go build ./...
go vet ./...
Les GIFs de démo sont générés avec VHS :
go build -o vhs/fakebin/sssh . && vhs vhs/demo.tape && vhs vhs/add.tape
Construit avec Bubble Tea, huh et go-toml.