Gitfed
Explorer/bastien-mrq/sssh

bastien-mrq/sssh

public

propriétaire: bastien-mrq@git.neuromancer.ovh

6 commits · 1 contributeurs · Go

main
Commits (6) Merge requests
Télécharger
lecture seule https://git.neuromancer.ovh/bastien-mrq/sssh.git
ssh://git@git.neuromancer.ovh:2222/bastien-mrq/sssh.git
completionsdossier
internaldossier
vhsdossier
.DS_Storefichier
.gitignorefichier
LICENSEfichier
README.mdfichier
go.modfichier
go.sumfichier
main.gofichier
README

sssh — simple-ssh

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

Démo du TUI

Fonctionnalités

  • sssh <nom> se connecte directement — un préfixe unique suffit (sssh ino → inoval)
  • sssh sans 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 ssh systè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

Démo add et list

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.

Licence

GNU GPL v3

AGPL-3.0 (LICENSE) Voir le fichier