Le portique de vos serveurs.
Portico est un gestionnaire de sessions SSH local-first, rapide et pensé pour le clavier. Un moteur Rust, deux interfaces : une TUI et une GUI. Votre ~/.ssh/config reste la source de vérité.
Votre setup est la source de vérité.
Portico lit ~/.ssh/config, known_hosts, ssh-agent et vos clés. Il ne réécrit jamais votre configuration : ses métadonnées (tags, favoris, groupes) vivent à côté, dans un TOML lisible. Pas de compte, pas de synchronisation imposée, pas de lock-in.
-
Zéro lock-in
Données en TOML lisible et versionnable. Supprimez Portico, votre SSH n’a pas bougé.
-
Keyboard-first
Chaque action a un raccourci. La palette ⌘K expose tout, la souris n’est jamais requise.
-
Performance
TUI utilisable en moins de 100 ms à froid. Aucun redraw quand rien ne change.
-
Respect d’OpenSSH
Include, Match, ProxyJump, tokens, ordre d’authentification : la sémantique exacte d’OpenSSH.
0 compte, cloud ou télémétrie. Tout fonctionne hors ligne.
7 Mo de mémoire au repos pour la TUI, terminal ouvert.
0,5 s pour afficher 500 000 lignes dans le terminal TUI.
140 + tests, dont un serveur SSH en process et l’interop OpenSSH réelle.
Un moteur. Deux interfaces.
portico-core porte tout le métier : sessions, authentification, SFTP, tunnels. La TUI vit dans votre terminal, la GUI dans une fenêtre native. Même moteur, mêmes raccourcis, mêmes thèmes.
╭┴┴╮ PORTICO │▍Hosts 9 Obsidian ╭──────────────────────────────────────╮ ╭───────────────────────────────────────────────╮ │ ⌕ Search hosts / │ │ │ ╰──────────────────────────────────────╯ │ db-prod │ ╭ Hosts ───────────────────────────────╮ │ postgres@10.0.4.12:22 │ │ ▍● db-prod ★ postgres@10.0.4.12 #pro│ │ │ │ ● bastion ops@bastion.example.com #│ │ ● Disconnected │ │ ● web-01 deploy@web-01.internal #pr│ │ │ │ ● staging deploy@staging.example.co│ │ ↵ connect │ │ ● nas ★ admin@nas.home.arpa #home │ │ │ │ ● api-01 deploy@api-01.internal #pr│ │ Jump bastion → db-prod │ │ ● gitlab-runner gitlab-runner@runne│ │ Forward -L 5432 localhost:5432 │ │ ● raspberry pi@192.168.1.42 #home #│ │ Tags #prod #db │ │ ● homelab-k3s ubuntu@192.168.1.60 #│ │ Defined in ~/.ssh/config:12 │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰──────────────────────────────────────╯ ╰───────────────────────────────────────────────╯ HOSTS ↵ connect / search d disconnect t theme ? help
Essayez : j / k pour naviguer, ↵ pour se connecter, / pour chercher, t pour le thème.
- ratatui 0.30 · crossterm
- alacritty_terminal · 10 000 lignes
- préfixe Ctrl-Space, comme tmux


- Tauri 2 · Rust mince
- Svelte 5 · xterm.js 6 WebGL
- ⌘K, toutes les actions
Trois thèmes sombres
Ce site utilise les tokens de portico-theme : changez de thème, la page entière suit.
Le MVP, ligne à ligne.
Quatorze fonctionnalités, livrées par phases. Chaque phase est close par trois revues : sécurité, protocoles SSH et design.
- Livré 08
- En cours 02
- Prévu 04
-
Parsing de ~/.ssh/config Livré
Host, Match, Include, wildcards, héritage, tokens et ProxyJump, avec la sémantique first-wins d’OpenSSH. Parser maison, testé.
-
Recherche floue, tags et favoris Livré
Matcher nucleo (celui de Helix), smart-case. #tag filtre par étiquette, * par favori.
-
Connexion SSH interactive Livré
PTY xterm-256color, onglets, redimensionnement en direct, vim et htop utilisables. ProxyJump récursif jusqu’à 8 rebonds.
-
SFTP : explorateur et transferts Livré
Deux panneaux façon Midnight Commander en TUI, liste et glisser-déposer en GUI. Progression, annulation, conflits gérés.
-
Port forwarding local et distant Livré
-L et -R, bind sur localhost par défaut. Les forwards de ssh_config sont proposés, jamais démarrés d’office.
-
known_hosts strict Livré
Entrées hachées, @cert-authority, @revoked. Une clé hôte modifiée provoque toujours un refus bloquant.
-
Statut de connexion et latence Livré
connecting → authenticating → connected, avec le RTT mesuré par keepalive@openssh.com. Erreurs avec un hint actionnable.
-
Trois thèmes et raccourcis documentés Livré
Obsidian, Basalt, Travertine Night. Contraste testé : texte principal AAA, secondaire AA.
-
Clés, agent et certificats SSH En cours
Découverte des clés et certificats livrée. Gestion de l’agent et alertes d’expiration des certificats en phase 3.
-
Secrets dans le keyring En cours
Keychain macOS et Secret Service Linux déjà utilisés. Vault chiffré de repli (Argon2id, XChaCha20-Poly1305) en phase 3.
-
Génération de clés Prévu
ed25519 par défaut, RSA 3072+ et ECDSA, avec passphrase. Refus d’écraser une clé existante.
-
Copie de clé publique Prévu
L’équivalent de ssh-copy-id, idempotent, vérifié par une reconnexion avec la clé.
-
Snippets Prévu
Globaux, par hôte ou par tag, avec placeholders. Exécutés dans l’onglet actif depuis la palette.
-
Sessions récentes et panneau debug Prévu
Historique, favoris éditables, logs de connexion par session et vue « config effective » façon ssh -G.
Événementiel, de bout en bout.
Le moteur publie ses événements sur un plan de contrôle. Les octets des terminaux circulent sur des canaux dédiés et bornés. Une UI lente ne ralentit jamais une session.
┌─ portico-tui ───────────┐ ┌─ portico-gui ───────────┐ │ ratatui · alacritty │ │ Tauri 2 · Svelte 5 │ └──┬─────────▲────────▲───┘ └──┬─────────▲────────▲───┘ │ cmd │ events │ bytes │ cmd │ events │ bytes ┌──▼─────────┴────────┴─────────────────▼─────────┴────────┴───┐ │ portico-core │ │ │ │ Engine ──────── broadcast<EngineEvent> ──────────────▶ │ │ │ │ │ ├─ session · actor ── russh::Handle │ │ │ ├─ pty ◀══ mpsc ×2, bounded ══▶ terminal │ │ │ ├─ sftp │ │ │ └─ -L / -R │ │ │ │ │ └─ prompt · oneshot<PromptId> ◀── respond() │ └──────────────────────────────────────────────────────────────┘
Aucun secret en clair. Jamais.
Sécurité by design, vérifiée par un agent d’audit à la fin de chaque phase : tous les constats critiques et élevés ont été corrigés avant de continuer.
-
Keyring système
Mots de passe et passphrases dans Keychain ou Secret Service, liés à l’identité vérifiée de l’hôte.
-
Clé modifiée = refus
Même avec StrictHostKeyChecking no. Aucun bouton « accepter » : la commande ssh-keygen -R exacte est affichée.
-
Pas de SHA-1
ssh-rsa retiré des algorithmes hôtes. Backend crypto aws-lc-rs, sans libssh2 en C.
-
Collage assaini
ESC et contrôles C1 retirés avant d’atteindre le terminal. Un collage ne répond jamais à un dialogue de clé.
-
Logs propres
Ni secret, ni contenu de terminal dans les logs ou les événements. Debug redigé.
-
Rust strict
forbid(unsafe_code), zéro unwrap hors tests, clippy pedantic sans warning.
Les mains restent sur le clavier.
Une seule grammaire pour la TUI et la GUI. Appuyez sur les touches : les raccourcis s’allument.
Hôtes
- j k Descendre / monter
- / Recherche floue, #tag, *
- ↵ Se connecter
- d Se déconnecter
- f Fichiers (SFTP)
- p Tunnels
- t Changer de thème
- ? Aide
Terminal · TUI
- Ctrl Space Préfixe des commandes
- ␣ n Nouvel onglet, même hôte
- ␣ w Fermer l’onglet
- ␣ 1…9 Aller à l’onglet n
- ⇧ PgUp Historique
GUI · ⌘ / Ctrl-Shift
- ⌘ K Palette de commandes
- ⌘ T Nouvel onglet
- ⌘ W Fermer l’onglet
- ⌘ ⇧ F Fichiers à côté du terminal
- ⌘ 1…9 Onglet n
Astuce : la touche t change le thème de ce site, comme dans Portico.
Tous les raccourcisLivré par phases, vérifié à chaque étape.
-
Phase 00
LivréFondations
Workspace, lints stricts, parser ssh_config, inventaire, thèmes, coquilles TUI et GUI.
-
Phase 01
LivréConnexion interactive
Transport, known_hosts, auth dans l’ordre d’OpenSSH, ProxyJump, PTY et terminaux dans les deux UIs.
-
Phase 02
LivréSFTP et tunnels
Explorateurs de fichiers, transferts streamés, forwarding -L et -R, panneau Tunnels.
-
Phase 03
En coursClés, secrets, snippets
Génération, copy-id, agent, vault chiffré de repli, snippets avec placeholders.
-
Phase 04
PrévuFinition MVP
Récents, favoris, panneau debug, raccourcis configurables, paquets .dmg, .deb et AppImage.
Ensuite
- SOCKS5 (-D)
- Split panes
- Enregistrement asciicast
- Sync locale optionnelle
- Windows
- Mosh
- Import Termius
Compilez-le ce soir.
Portico est en développement actif. En attendant les paquets signés de la phase 4, il se compile depuis les sources avec Rust 1.90+.
-
git clone https://github.com/fs0ciety7000/Portico && cd Portico -
cargo run --release -p portico-tui -
cd apps/portico-gui && pnpm install && pnpm tauri dev
Linux : la GUI nécessite libwebkit2gtk-4.1-dev. Licence MIT OR Apache-2.0.
Avant de commencer.
Portico modifie-t-il mon ~/.ssh/config ?
Non, jamais. Portico le lit. Ses propres métadonnées vivent dans hosts.toml. Les seules écritures dans ~/.ssh sont l’ajout dans known_hosts après votre accord, et les clés que vous demandez de générer.
Faut-il un compte ou une connexion Internet ?
Non. Aucun compte, aucun service distant, aucune télémétrie. Portico fonctionne entièrement hors ligne.
Pourquoi une TUI et une GUI ?
Parce que certains vivent dans tmux et d’autres dans des fenêtres. Le moteur est le même : comportement, sécurité et raccourcis identiques.
Et Windows ?
macOS et Linux d’abord. Windows figure dans la feuille de route post-MVP.
Comment Portico se compare-t-il à Termius ?
Portico est ouvert, local et sans abonnement. Il respecte votre configuration OpenSSH au lieu de la remplacer, et un import Termius est prévu après le MVP.
Quelle est la licence ?
MIT OR Apache-2.0, au choix.