
Interface de terminal rápida para seus hosts SSH: pesquisa difusa e conexão em dois toques, transferência de arquivos SFTP em painel duplo e encaminhamento de porta em segundo plano. Mantém seu próprio banco de dados de hosts e gera o comando ssh — nunca edita o ~/.ssh/config.

macOS e Linux, x86_64 e arm64. Os pacotes pré-compilados não precisam de toolchain Rust. Em tempo de execução, o sshelf exige OpenSSH 8.4+, que é de onde vem o fornecimento automático de senha.
Homebrew (macOS ou Linux):
brew install max-rh/tap/sshelf
Instalador via shell (binário pré-compilado, detecta sua plataforma):
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-rh/sshelf/releases/latest/download/sshelf-installer.sh | sh
Debian/Ubuntu: baixe o .deb do
último release e depois
sudo apt install ./sshelf_*_amd64.deb (ou *_arm64.deb).
Fedora / RHEL / Rocky / openSUSE: baixe o .rpm (build estático, funciona em qualquer
distro RPM) do último release e depois
sudo dnf install ./sshelf-*.x86_64.rpm (ou .aarch64.rpm).
Gentoo: overlay mantido pela comunidade (não oficial, agradecimentos a @masterwolf-git). Execute
eselect repository enable masterwolf && emerge --sync && emerge --ask app-admin/sshelf.
Cargo (do crates.io; exige Rust 1.88+):
cargo install sshelf.
O tab-completion de shell acompanha todos os pacotes. Abra um novo shell após instalar. No Linux,
os segredos usam um backend Secret Service em Rust puro (sem dependências de build de libdbus/OpenSSL).
Detalhes completos e configuração de completions: Guia de instalação.
Eu administro algumas dezenas de máquinas (um homelab, alguns VPSes, algumas caixas atrás de um bastion), e
vivia digitando ssh -J bastion -i ~/.ssh/some-key -p 2222 user@host de memória ou vasculhando meu
histórico de shell para encontrá-lo. Todo gerenciador de SSH que tentei queria ou ser dono do ~/.ssh/config ou
me dar uma conta e sincronizar meus hosts pelo servidor de alguém. Eu não queria nenhum dos dois. Eu queria
um lançador que mantivesse sua própria lista, montasse o comando e saísse do caminho. E um lugar
para guardar as senhas das poucas máquinas que não podem usar chaves, sem nunca colocá-las
em um arquivo. Então eu o construí.
Digite para filtrar. Enter conecta. Seus hosts mais usados sobem para o topo sozinhos
(frecência: contagem de uso, decaída por recência), e tag:prod / site:homelab estreitam a lista
ainda mais. Ctrl-y copia o comando que ele montou em vez de executá-lo. Pelo shell,
sshelf prod-web conecta pelo nome e sshelf - reconecta ao último host, ambos sem
abrir a TUI.

exec() no seu sshO sshelf monta o argv a partir do registro do host, derruba sua própria interface e então substitui a si mesmo
pelo OpenSSH. Não há wrapper entre você e a sessão: um TTY real, seu ssh, suas
flags sem config. Quando a sessão termina, você volta ao seu shell, não a um menu. O
comando que ele executa é exatamente o que Ctrl-y mostra a você.
Como o comando é montado.
Ctrl-t abre seus arquivos à esquerda e os do host à direita, por uma única conexão
autenticada. Space marca, Ctrl-a marca tudo o que o filtro mostra, Ctrl-s envia o
conjunto inteiro em qualquer direção, F7 cria um diretório. Um nome que o destino já possui é ignorado,
nunca sobrescrito.

Ctrl-f abre um túnel Local, Remoto ou SOCKS que continua rodando depois que você sai do sshelf,
e depois que você fecha o terminal. F4 lista todos eles em todos os hosts e interrompe o
que você escolher. Eles são rastreados por pid e reconciliados com os processos que estão realmente
rodando, então nada permanece em uma lista depois de morrer. Sem daemon, sem supervisor.

Defina tmux = "window" ou "pane" e Enter abre o host em uma nova janela do tmux (nomeada com o
nome do host) ou em um novo painel, em vez de substituir o sshelf. Encerre a sessão e o seletor ainda está
ali, ainda rodando.

F3 gerencia sites: um site agrupa hosts e pode carregar um bastion, usuário, porta e chave
compartilhados que seus membros herdam no momento da conexão, preenchendo apenas os campos que um host deixa
vazios. Tags são rótulos de forma livre nos quais você filtra. Ambos aparecem na lista, e um bastion
herdado aparece no comando que o sshelf monta.

sshpassPara os hosts que não podem usar chaves, o sshelf armazena a senha no chaveiro do seu sistema operacional (ou um
cofre criptografado com age em uma máquina sem cabeça) e a fornece por meio de SSH_ASKPASS quando o ssh
pede. Ele responde apenas a prompts com o formato de uma senha real ou prompt de passphrase, então um servidor
não pode pescar o segredo com texto parecido. A senha nunca está em um arquivo, nunca em ps,
nunca em uma linha de comando. Hosts que também querem um código de verificação recebem um prompt para ele antes
de a conexão começar. Senhas, chaves e 2FA
· Segurança.

sshelf export escreve um fragmento de ssh_config próprio e dá a você uma única linha Include
para colar em ~/.ssh/config você mesmo. Depois disso, ssh, scp, rsync, git comuns e qualquer coisa
que leia a config do SSH (VS Code Remote-SSH, JetBrains Gateway) resolvem seus hosts do sshelf pelo
nome, bastion e tudo. O arquivo é atualizado sempre que seus hosts mudam. O sshelf ainda não escreve
nada em ~/.ssh.

sshelf import lê ~/.ssh/config, estritamente somente leitura, e copia os hosts que consegue
modelar. sshelf import --tailscale executa sua própria CLI tailscale e transforma sua tailnet em
hosts pesquisáveis, com nomes MagicDNS, a tailnet como um site e tags ACL como tags. Ambos são
somente adição, então reexecutar um deles é sempre seguro, e nenhum acontece a menos que você peça.
sshelf doctorUm comando para quando algo não está funcionando. Ele verifica sua versão do OpenSSH, se o backend
de segredos realmente abre, se hosts.toml faz parse, hosts apontando para um site que
não existe, um socket de agente ausente e uma exportação que se desviou. Ele nomeia a correção para
cada um. Somente leitura, sai com 1 se algo falhar, e nunca contata um host.

Compilado em setembro de 2026 a partir do próprio README de cada projeto (e, para o Termius, seu site). Uma célula lendo "não informado" significa que a documentação do próprio projeto não diz.
| sshelf | purple | omnyssh | Voltius | Termius | |
|---|---|---|---|---|---|
| Executa em | terminal (TUI) | terminal (TUI) | terminal (TUI) + app desktop | app desktop (Tauri) | app desktop + mobile |
Edita ~/.ssh/config | nunca | sim, no lugar | não, lê na inicialização | n/d (armazenamento próprio) | n/d (armazenamento próprio) |
| Conta necessária | não | não | não | para sincronização em tempo real | sim |
| Guarda tokens para outros serviços | não | sim, um por provedor de nuvem | não | sim, para sincronização | não informado |
| Chamadas de rede próprias | nenhuma | sincronização com provedor de nuvem | polling de métricas de host | sincronização, atualizações, métricas de host | sincronização |
| Custódia de segredos | seu chaveiro do SO / cofre age | chaveiro + gerenciadores de senha | não informado | seu cofre E2EE | seu cofre criptografado |
| Conectar | exec() no seu ssh | executa seu comando ssh | terminal embutido | terminal embutido | terminal embutido |
| Encaminhamentos de porta | sim, sobrevivem ao sair | sim, monitoramento ao vivo | não informado | sim | sim |
| Transferência de arquivos | SFTP em dois painéis | painéis divididos | SFTP em dois painéis | dois painéis, arrastar e soltar | SFTP |
| Contêineres / dashboards de métricas | não | sim | sim | sim | não informado |
| Compartilhamento em equipe | não | não | não | planos pagos | planos pagos |
| Plataformas | macOS, Linux | macOS, Linux | macOS, Linux, Windows, Termux | Windows, macOS, Linux | macOS, Windows, Linux, iOS, Android |
| Licença | MIT / Apache-2.0 | MIT | Apache-2.0 | AGPL-3.0 | proprietária |
O sshelf não tem dashboards, nem gerenciamento de contêineres, nem compartilhamento em equipe, nem build para Windows. Os
três primeiros são escolhas, e PRIVACY.md explica o porquê: cada um significaria
o sshelf guardando algo seu, ou conversando com algo por conta própria.
~/.ssh/config e nunca escreve nada em ~/.ssh.hosts.toml. Esse arquivo é seguro para commitar e compartilhar.PRIVACY.md diz o que ele lê, escreve, executa e envia.
SECURITY.md é o modelo de ameaças para segredos armazenados.
sshelf # inicie a TUI (Ctrl-a adiciona seu primeiro host)
sshelf import --dry-run # pré-visualize uma importação somente leitura de ~/.ssh/config
sshelf import # ...faça isso
sshelf import --tailscale # ...ou importe toda a sua tailnet do Tailscale
sshelf prod-web # conecte direto a um host salvo (pula a TUI)
sshelf - # reconecte ao host usado mais recentemente
sshelf list tag:prod --json # listagem para scripts (campos + o comando ssh)
sshelf print-command db # imprima o comando ssh em vez de executá-lo
sshelf export # arquivo Include para ssh/scp/VS Code comuns verem seus hosts
sshelf doctor # algo não está funcionando? verifique a configuração e receba a correção
Na TUI: digite para filtrar (mais tag:NAME / site:NAME) e Enter para conectar.
F1 mostra todas as teclas.
O guia do usuário cobre tudo:
Quickstart ·
Referência da CLI ·
Configuração ·
FAQ ·
sshelf doctor.
Há páginas por recurso para transferência de arquivos,
encaminhamento de porta,
sites e tags,
senhas e 2FA e
exportação de config SSH.
Decisões de arquitetura e design vivem em docs/, e há um
llms.txt para as máquinas.
Pergunte, sugira um recurso ou mostre o que você construiu com ele em
GitHub Discussions. Contribuições são
bem-vindas. Comece por CONTRIBUTING.md.
Se o sshelf for útil para você, uma gorjeta em Bitcoin é apreciada (totalmente opcional):
Bitcoin: bc1qcdeyhpwq76u97dhymx876n49uq85z4y3ccrpje
Duplamente licenciado sob MIT ou Apache-2.0, à sua escolha (a norma do ecossistema Rust).