npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

switcher-ssh

v1.1.1

Published

CLI para gerenciar múltiplos perfis SSH e configurações Git

Readme

Switcher SSH

CLI para gerenciar múltiplos perfis SSH e configurações Git. Troque entre contas pessoais e de trabalho com um comando — e retome o último perfil automaticamente ao abrir o terminal.

Instalação

Uso global no terminal (recomendado)

# Opção 1: instalar do npm (produção)
npm install -g switcher-ssh

# Opção 2: instalar a partir do código local (desenvolvimento)
cd /caminho/para/sshx
npm install
npm run setup

O npm run setup:

  • Configura ~/.ssh, perfis e template Git
  • Registra o comando sshx globalmente via npm link
  • Adiciona ao ~/.zshrc a restauração automática do último perfil ao abrir o terminal

Para remover o link global:

npm run unlink

Características

  • Múltiplos perfis SSH com uma chave exclusiva por perfil
  • Configuração Git (nome e e-mail) por perfil
  • Geração de chave SSH integrada no cadastro
  • Menu interativo contínuo (não fecha após cada ação)
  • Perfil padrão: lembra o último usado e restaura ao reiniciar o notebook
  • Comando show para copiar a chave pública
  • Comando clear para remover chaves externas do ssh-agent
  • Suporte ao keychain do macOS (--apple-use-keychain)
  • Teste de conexão com GitHub ao trocar perfil

Menu interativo

sshx

| Opção | Descrição | |-------|-----------| | Adicionar | Cadastra um novo perfil | | Trocar | Ativa outro perfil e lista o resultado | | Remover | Remove um perfil | | Listar | Exibe todos os perfis | | Mostrar ativo | Exibe a chave pública do perfil ativo | | Limpar Chaves | Remove chaves do agent que não pertencem ao sshx | | Sair | Encerra o menu |

Comandos

Adicionar perfil

sshx add
# ou
sshx --add

O fluxo pede nome, e-mail/nome Git e a chave SSH. Se não houver chave livre, gera uma automaticamente (id_ed25519_<nome-do-perfil>).

Trocar perfil

sshx liniker
# ou
sshx switch liniker

Remover perfil

sshx reset liniker

Listar perfis

sshx profiles

Exemplo de saída:

liniker   ○ inativo
edglobo   ● ativo  ★ padrão
  • ● ativo — perfil Git configurado globalmente e chave carregada
  • ★ padrão — último perfil usado (restaurado ao abrir o terminal)

Exibir chave pública

sshx show           # perfil ativo
sshx show edglobo   # perfil específico

Copie a linha ssh-ed25519 ... e cadastre no GitHub, GitLab, Bitbucket, etc.

Limpar chaves externas

sshx clear

Remove do ssh-agent chaves que não estão cadastradas em nenhum perfil sshx.

Restaurar último perfil

sshx restore
sshx restore --quiet   # silencioso (usado no ~/.zshrc)

Útil após reiniciar o notebook, quando o ssh-agent perde as chaves carregadas.

Listar arquivos em ~/.ssh

sshx list

Perfil padrão (restauração automática)

Ao trocar ou adicionar um perfil, o sshx salva em ~/.ssh/sshx-state.json:

{
  "lastProfile": "edglobo",
  "updatedAt": "2026-06-09T14:59:38.413Z"
}

Com o hook no ~/.zshrc (configurado pelo npm run setup), ao abrir um terminal:

  1. A chave do perfil padrão é recarregada no ssh-agent
  2. O .gitconfig global aponta para as configurações desse perfil

Para reconfigurar manualmente, adicione ao ~/.zshrc:

# sshx — restaurar último perfil SSH ao abrir o terminal
if command -v sshx >/dev/null 2>&1; then
  sshx restore --quiet
fi

Exemplo: pessoal + trabalho

# 1. Perfil pessoal (usa chave existente ou gera nova)
sshx add    # nome: liniker

# 2. Perfil trabalho (gera id_ed25519_edglobo automaticamente se não houver chave livre)
sshx add    # nome: edglobo

# 3. Cadastrar chaves nos respectivos GitHubs
sshx show liniker
sshx show edglobo

# 4. Trocar quando precisar
sshx liniker
sshx edglobo

Como funciona

Cada perfil associa:

  • Um arquivo de chave privada em ~/.ssh
  • Um arquivo Git em ~/.ssh/git-configs/<perfil>.gitconfig
  • Uma entrada em ~/.ssh/ssh-profiles.json

Ao trocar de perfil, o sshx:

  1. Limpa as chaves do ssh-agent
  2. Carrega a chave do perfil selecionado
  3. Atualiza git config --global include.path para o perfil
  4. Salva o perfil como padrão
  5. Testa a conexão com o GitHub (exceto no cadastro)

Arquivos criados

| Arquivo / pasta | Descrição | |-----------------|-----------| | ~/.ssh/ssh-profiles.json | Mapa perfil → caminho da chave | | ~/.ssh/sshx-state.json | Último perfil usado (padrão) | | ~/.ssh/git-configs/ | Configurações Git por perfil | | ~/.ssh/git-configs/default.gitconfig | Aliases e defaults compartilhados |

A pasta ~/.ssh/agent não é criada pelo sshx — é do OpenSSH no macOS.

Solução de problemas

Nenhuma chave livre ao adicionar perfil

Cada perfil precisa de sua própria chave. O sshx gera automaticamente se não houver chave disponível. Também é possível gerar manualmente:

ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/id_ed25519_trabalho
sshx add

GitHub: Permission denied (publickey)

A chave ainda não foi cadastrada no GitHub. Rode sshx show <perfil>, copie a chave pública e adicione em Settings → SSH keys.

Dois perfis com a mesma chave

Não é suportado. Dois perfis com o mesmo arquivo de chave compartilham a mesma autenticação SSH — só o Git (nome/e-mail) muda. Use chaves separadas para contas separadas.

ssh-agent não está rodando

eval "$(ssh-agent -s)"
sshx restore

Requisitos

  • Node.js >= 16
  • Git instalado
  • macOS ou Linux (Windows experimental)

Licença

MIT