
Interfaccia terminale veloce per i tuoi host SSH: ricerca fuzzy e connessione in due tasti, trasferimento file SFTP a doppio pannello e inoltro porte in background. Mantiene un proprio database degli host e genera il comando ssh — non modifica mai ~/.ssh/config.

macOS e Linux, x86_64 e arm64. I pacchetti precompilati non richiedono il toolchain Rust. A runtime sshelf richiede OpenSSH 8.4+, che è da dove arriva la fornitura automatica delle password.
Homebrew (macOS o Linux):
brew install max-rh/tap/sshelf
Installer shell (binario precompilato, rileva la tua piattaforma):
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-rh/sshelf/releases/latest/download/sshelf-installer.sh | sh
Debian/Ubuntu: prendi il .deb dall'ultima release, poi
sudo apt install ./sshelf_*_amd64.deb (o *_arm64.deb).
Fedora / RHEL / Rocky / openSUSE: prendi il .rpm (build statica, funziona su qualsiasi distro
RPM) dall'ultima release, poi
sudo dnf install ./sshelf-*.x86_64.rpm (o .aarch64.rpm).
Gentoo: overlay mantenuto dalla community (non ufficiale, grazie a @masterwolf-git). Esegui
eselect repository enable masterwolf && emerge --sync && emerge --ask app-admin/sshelf.
Cargo (da crates.io; richiede Rust 1.88+):
cargo install sshelf.
Il tab-completion per la shell è incluso in ogni pacchetto. Apri una nuova shell dopo l'installazione. Su Linux,
i segreti usano un backend Secret Service in puro Rust (nessuna dipendenza di build libdbus/OpenSSL).
Dettagli completi e configurazione del completamento: Guida all'installazione.
Gestisco un paio di dozzine di macchine (un homelab, alcuni VPS, qualche macchina dietro un bastion), e
continuavo a digitare ssh -J bastion -i ~/.ssh/some-key -p 2222 user@host a memoria o a cercare nella
cronologia della shell. Ogni gestore SSH che ho provato voleva o possedere ~/.ssh/config o
darmi un account e sincronizzare i miei host tramite il server di qualcuno. Non volevo nessuna delle due cose. Volevo
un launcher che mantenesse una propria lista, costruisse il comando e si facesse da parte. E un posto
dove tenere le password per la manciata di host che non possono usare le chiavi, senza mai metterle
in un file. Quindi l'ho costruito.
Digita per filtrare. Invio connette. I tuoi host più usati salgono in cima da soli
(frecency: conteggio degli utilizzi, attenuato dalla recency), e tag:prod / site:homelab restringono ulteriormente
la lista. Ctrl-y copia il comando che ha costruito invece di eseguirlo. Dalla shell,
sshelf prod-web connette per nome e sshelf - riconnette all'ultimo host, entrambi senza
aprire la TUI.

exec() nel tuo sshsshelf costruisce l'argv dal record dell'host, smonta la propria UI e poi sostituisce se stesso
con OpenSSH. Non c'è alcun wrapper tra te e la sessione: una vera TTY, il tuo ssh, i tuoi
flag senza config. Quando la sessione termina torni alla tua shell, non in un menu. Il
comando che esegue è esattamente quello che Ctrl-y ti mostra.
Come viene costruito il comando.
Ctrl-t apre i tuoi file a sinistra e quelli dell'host a destra, su una singola connessione
autenticata. Spazio marca, Ctrl-a marca tutto ciò che il filtro mostra, Ctrl-s invia
l'intero set in entrambe le direzioni, F7 crea una directory. Un nome che la destinazione ha già viene saltato,
mai sovrascritto.

Ctrl-f apre un tunnel Local, Remote o SOCKS che continua a girare dopo che esci da sshelf,
e dopo che chiudi il terminale. F4 elenca tutti i tunnel su tutti gli host e ferma quello
che scegli. Sono tracciati tramite pid e riconciliati con i processi realmente
in esecuzione, quindi nulla rimane in una lista dopo che muore. Nessun daemon, nessun supervisor.

Imposta tmux = "window" o "pane" e Invio apre l'host in una nuova finestra tmux (chiamata come
l'host) o in un nuovo pannello invece di sostituire sshelf. Termina la sessione e il selettore è ancora
lì, ancora in esecuzione.

F3 gestisce i siti: un sito raggruppa host e può portare un bastion, utente, porta e chiave
condivisi che i suoi membri ereditano al momento della connessione, riempiendo solo i campi che un host lascia non impostati. I tag
sono etichette libere su cui filtrare. Entrambi compaiono nella lista, e un bastion ereditato compare
nel comando che sshelf costruisce.

sshpassPer gli host che non possono usare le chiavi, sshelf memorizza la password nel portachiavi del tuo OS (o in un
vault crittografato con age su una macchina headless) e la fornisce tramite SSH_ASKPASS quando ssh la chiede.
Risponde solo a prompt con la forma di una vera password o passphrase, quindi un server
non può phishingare il segreto con testo simile. La password non è mai in un file, mai in ps,
mai su una riga di comando. Gli host che vogliono anche un codice di verifica ricevono un prompt prima
dell'avvio della connessione. Password, chiavi e 2FA
· Sicurezza.

sshelf export scrive un frammento ssh_config proprio e ti dà una singola riga Include
da incollare tu stesso in ~/.ssh/config. Dopo di che, il semplice ssh, scp, rsync, git e qualsiasi cosa
che legge la config SSH (VS Code Remote-SSH, JetBrains Gateway) risolve i tuoi host sshelf per
nome, bastion incluso. Il file si aggiorna ogni volta che i tuoi host cambiano. sshelf continua a non scrivere
nulla sotto ~/.ssh.

sshelf import legge ~/.ssh/config, strettamente in sola lettura, e copia gli host che può
modellare. sshelf import --tailscale esegue la tua CLI tailscale e trasforma la tua tailnet in
host ricercabili, con nomi MagicDNS, la tailnet come sito e i tag ACL come tag. Entrambi sono
solo-aggiunta, quindi rieseguirli è sempre sicuro, e nessuno dei due avviene a meno che tu non lo chieda.
sshelf doctorUn comando per quando qualcosa non funziona. Controlla la tua versione di OpenSSH, se il backend
dei segreti si apre davvero, se hosts.toml viene parsato, gli host che puntano a un sito che
non esiste, un socket dell'agente mancante e un export che si è discostato. Nomina la soluzione per
ciascuno. In sola lettura, esce con 1 se qualcosa fallisce, e non contatta mai un host.

Compilato a settembre 2026 dal README di ciascun progetto (e, per Termius, dal suo sito). Una cella che riporta "non dichiarato" significa che i documenti del progetto non lo dicono.
| sshelf | purple | omnyssh | Voltius | Termius | |
|---|---|---|---|---|---|
| Esegue in | terminale (TUI) | terminale (TUI) | terminale (TUI) + app desktop | app desktop (Tauri) | app desktop + mobile |
Modifica ~/.ssh/config | mai | sì, in place | no, lo legge all'avvio | n/d (store proprio) | n/d (store proprio) |
| Account richiesto | no | no | no | per la sincronizzazione in tempo reale | sì |
| Conserva token per altri servizi | no | sì, uno per cloud provider | no | sì, per la sincronizzazione | non dichiarato |
| Chiamate di rete proprie | nessuna | sincronizzazione cloud provider | polling metriche host | sincronizzazione, aggiornamenti, metriche host | sincronizzazione |
| Custodia dei segreti | portachiavi del tuo OS / vault age | portachiavi + password manager | non dichiarato | vault E2EE | vault crittografato |
| Connessione | exec() nel tuo ssh | esegue il tuo comando ssh | terminale integrato | terminale integrato | terminale integrato |
| Port forwarding | sì, sopravvive all'uscita | sì, monitoraggio live | non dichiarato | sì | sì |
| Trasferimento file | SFTP a doppio pannello | pannello diviso | SFTP a due pannelli | doppio pannello, drag & drop | SFTP |
| Contenitori / dashboard metriche | no | sì | sì | sì | non dichiarato |
| Condivisione di team | no | no | no | piani a pagamento | piani a pagamento |
| Piattaforme | macOS, Linux | macOS, Linux | macOS, Linux, Windows, Termux | Windows, macOS, Linux | macOS, Windows, Linux, iOS, Android |
| Licenza | MIT / Apache-2.0 | MIT | Apache-2.0 | AGPL-3.0 | proprietaria |
sshelf non ha dashboard, nessuna gestione contenitori, nessuna condivisione di team e nessuna build Windows. Le
prime tre sono scelte, e PRIVACY.md spiega perché: ognuna significherebbe
che sshelf detiene qualcosa di tuo, o parla con qualcosa per conto proprio.
~/.ssh/config e non scrive mai nulla sotto ~/.ssh.hosts.toml. Quel file è sicuro da committare e condividere.PRIVACY.md dice cosa legge, scrive, esegue e invia.
SECURITY.md è il modello di minaccia per i segreti memorizzati.
sshelf # avvia la TUI (Ctrl-a aggiunge il tuo primo host)
sshelf import --dry-run # anteprima di un import in sola lettura da ~/.ssh/config
sshelf import # ...eseguilo
sshelf import --tailscale # ...o importa tutta la tua tailnet Tailscale
sshelf prod-web # connettiti direttamente a un host salvato (salta la TUI)
sshelf - # riconnettiti all'host usato più di recente
sshelf list tag:prod --json # elenco scriptabile (campi + il comando ssh)
sshelf print-command db # stampa il comando ssh invece di eseguirlo
sshelf export # file Include così ssh/scp/VS Code vedono i tuoi host
sshelf doctor # qualcosa non funziona? controlla la configurazione e ti viene detto il fix
Nella TUI: digita per filtrare (più tag:NOME / site:NOME) e Invio per connetterti.
F1 mostra ogni tasto.
La guida utente copre tutto:
Quickstart ·
Riferimento CLI ·
Configurazione ·
FAQ ·
sshelf doctor.
Ci sono pagine per funzione per il trasferimento file,
il port forwarding,
siti e tag,
password e 2FA e
l'esportazione della config SSH.
Le decisioni di architettura e design vivono in docs/, e c'è un
llms.txt per le macchine.
Chiedi, suggerisci una funzione o mostra cosa hai costruito con esso in
GitHub Discussions. I contributi sono
benvenuti. Inizia con CONTRIBUTING.md.
Se sshelf ti è utile, una mancia in Bitcoin è apprezzata (del tutto facoltativa):
Bitcoin: bc1qcdeyhpwq76u97dhymx876n49uq85z4y3ccrpje
Dual-licensed sotto MIT o Apache-2.0, a tua scelta (la norma dell'ecosistema Rust).