Como gerenciar mais de 50 servidores SSH e VMs na nuvem no Mac

Para gerenciar servidores SSH no Mac (50 ou mais) e VMs na nuvem, agrupe seus hosts, guarde as senhas no chaveiro do sistema e leia CPU, RAM e disco ao vivo sem instalar um agente em cada servidor. O SSH Host Manager do MXterm Pro faz isso sobre conexões OpenSSH reais. O plano Free salva 5 hosts por padrão; o Pro remove o limite.
Para quem é este guia
Este guia é para quem cuida de infraestrutura de backend em AWS, Google Cloud, DigitalOcean, Hetzner ou bare metal. Isso costuma significar mais hosts do que cabem na memória, divididos entre produção, staging e algumas máquinas de desenvolvimento avulsas.
Se você cuida de um ou dois servidores, uma aba do Terminal.app e o seu ~/.ssh/config continuam sendo o jeito mais simples. Os recursos de organização abaixo (grupos, filtros, broadcast e telemetria) começam a valer a pena quando você lida com uma dúzia de hosts ou mais e não lembra qual aba é qual.
Agrupar e filtrar dezenas de hosts
Pressione ⌘⇧H para abrir o SSH Host Manager. Cada host que você adiciona recebe nome, endereço, porta, usuário e um de três tipos de autenticação: senha, arquivo de chave privada ou interativo por teclado. A maioria dos atalhos, incluindo este, pode ser remapeada em Configurações → Atalhos de teclado. Zoom, ⌘, ⌘1 a ⌘9 e alguns outros são fixos.
Todo host pertence a um grupo. Seis grupos já vêm prontos (Production, Staging, Testing, Cloud / VPS, Internal / VPN, Development), e você pode criar os seus. Uma fileira de chips de filtro acima da lista de hosts mostra uma contagem ao vivo ao lado de cada grupo.
Clique em "Production (14)" e uma lista de 50 hosts se reduz aos hosts que podem te causar problema se você digitar o comando errado. São filtros de grupo em um nível só, não uma árvore de pastas aninhadas. Não existe uma caixa de busca de texto livre separada desses filtros, então não espere nada mais sofisticado.
Se você guarda seus servidores em ~/.ssh/config, o botão Importar lê as linhas Host, HostName, User, Port e IdentityFile e as coloca no grupo "Imported" de uma vez. O mesmo botão lê um arquivo de sessões do MobaXterm (só sessões SSH, no grupo "MobaXterm") e uma exportação de perfis do iTerm2 (perfis cujo comando é uma linha ssh simples, no grupo "iTerm2"). No Mac, a aba Importar / Exportar do Gerenciador de sessões também pode procurar perfis do iTerm2.
O nome desse grupo ("MobaXterm" ou "iTerm2" nessas importações) aparece como um selo em cada host, mas a fileira de filtros lista só os seis grupos padrão e os que você criar, então crie um grupo com o mesmo nome para filtrar por ele. No Pro, um config com 50 hosts vira uma importação em vez de cinquenta formulários. No Free, a importação para no limite de 5 hosts.
O importador não interpreta ProxyJump nem outras diretivas avançadas. Mais sobre isso abaixo.
Onde suas senhas e chaves ficam de verdade
As senhas SSH vão para o repositório de credenciais do sistema operacional (o Keychain do macOS, no Mac) sob o nome de serviço com.mxterm.desktop.ssh, indexadas pelo id do host. A senha de uma chave (passphrase) não é salva: o app a remove antes de gravar a lista de hosts, e ela nunca chega ao repositório de credenciais do sistema. O Gerenciador de Credenciais do Windows está integrado, mas o SSH no Windows não foi verificado.
Nada secreto é gravado no arquivo de configurações local do MXterm Pro. Um host salvo antigo que ainda tinha senha em texto puro é reescrito sem ela no próximo carregamento.
O caminho de um arquivo de chave, como ~/.ssh/id_ed25519, não é segredo, é só um caminho, então esse campo continua na lista de hosts em texto puro. É o mesmo que você veria em um ~/.ssh/config.
Por que reconectar ao mesmo servidor parece instantâneo
No macOS, toda conexão SSH que o MXterm Pro abre leva três opções: ControlMaster=auto, ControlPath=~/.mxterm/sockets/%r@%h:%p e ControlPersist=10m. É multiplexação de conexão do OpenSSH de verdade, nada customizado.
A primeira conexão a um host abre um socket mestre. As conexões seguintes ao mesmo host, como uma segunda aba de terminal ou o painel SFTP, reaproveitam esse socket, e o mestre continua vivo por 10 minutos depois que a última fecha. Isso evita um novo handshake TCP e a ida e volta da autenticação. Alterar as configurações de conexão de um host salvo ou excluí-lo fecha a conexão compartilhada, e o painel de arquivos mostra um botão Redefinir conexão quando o servidor recusa um login ou exige uma senha nova.
Isso também resolve um problema dos hosts com autenticação por senha. BatchMode=yes significa que o SFTP não consegue pedir a senha sozinho, então, sem um socket mestre compartilhado, um host com senha conectaria numa aba de terminal e falharia no navegador de arquivos. Compartilhar o ControlPath deixa o painel SFTP aproveitar uma sessão que você já autenticou em um painel de terminal.
Executar o mesmo comando em vários servidores ao mesmo tempo (Broadcast Mode)
⌘⇧B ativa o Broadcast Mode com todos os painéis da aba atual já no grupo. Option/Alt+clique em um painel para tirá-lo do grupo ou colocá-lo de volta. Limpar esvazia o grupo e Selecionar tudo o enche de novo. Um banner fixo com o texto "Broadcast ON · N panes" fica na tela. O que você digita em qualquer painel do grupo vai para todos eles, na ordem do layout.
Confira duas coisas antes de depender disso em 50 servidores. O grupo começa com todos os painéis da aba atual, então reduza-o antes de digitar, e ele alcança só os painéis dessa aba, não todas as conexões abertas. E não há confirmação a cada tecla depois de ativado, porque a ideia é digitar uma vez e o comando chegar a todos.
A proteção é o banner, difícil de não ver. Limpar derruba o grupo inteiro e Esc sai na hora. Monte o grupo com o mesmo cuidado que você teria antes de rodar pssh ou painéis sincronizados do tmux em uma frota de produção, porque a ferramenta não vai te impedir de fazer broadcast para os seis servidores errados.
Telemetria de servidor ao vivo sem agente de monitoramento
O Server Telemetry HUD fica no rodapé de uma aba SSH e mostra CPU %, RAM %, disco % e uptime, com cores verde, âmbar ou vermelho acima de 65% e 85%. Ele se atualiza sozinho a cada 20 segundos, e um botão de atualização manual dá um número na hora.
Cada atualização executa um one-liner python3 -c "..." de curta duração pela sua conexão SSH existente. Ele lê a carga de CPU em os.getloadavg() em relação ao número de núcleos, a memória em /proc/meminfo, o disco em shutil.disk_usage('/') e o uptime em /proc/uptime, e termina. Nada é instalado e nada fica residente no servidor.
O único requisito é que o python3 exista no host remoto. Muitas imagens de servidor o trazem, mas as mínimas, como Alpine, costumam não trazer. Sem ele, a barra de estatísticas fica vazia: a chamada de uptime que ela também tenta não devolve campos utilizáveis, e o MXterm Pro prefere não mostrar número nenhum a mostrar um número inventado. A RAM vem de /proc/meminfo, então um servidor macOS ou BSD mostra um traço na RAM em vez de uma porcentagem.
E os jump hosts e bastions?
Um host salvo tem um campo Jump host / bastion (você pode encadear vários, separados por vírgula) e uma opção Encaminhar agente SSH. A conexão é montada como argv de ssh real, com -J e -A definidos de acordo.
O importador de ~/.ssh/config não preenche esse campo para você. Ele lê só HostName, User, Port e IdentityFile, e uma linha ProxyJump é ignorada em vez de traduzida. Um perfil do iTerm2 cujo comando é ssh -J bastion host traz o jump host junto. Para hosts importados de ~/.ssh/config ou do MobaXterm, defina o jump host você mesmo, uma vez, no formulário do próprio host.
Outra opção: um painel de terminal é um PTY real. Se o seu ~/.ssh/config tem uma entrada Host prod-db com uma linha ProxyJump bastion, digitar ssh prod-db em um painel de shell comum respeita essa configuração, exatamente como o Terminal.app.
Desse jeito você não ganha o rótulo de grupo nem a barra de estatísticas do servidor para esse host.
O broadcast alcança os painéis de uma aba. Uma aba aberta pelo SSH Host Manager fica presa a um único host, então, para digitar em vários servidores ao mesmo tempo, abra painéis de shell comuns em uma aba, execute ssh <alias> em cada um e faça o broadcast para eles. O Free não tem limite de painéis.
Free vs. Pro: quanto 50 servidores realmente custam
Este é o número que mais importa neste caso de uso: o plano Free permite salvar só 5 hosts SSH. Grupos, importação, multiplexação, broadcast e telemetria funcionam igual no Free e no Pro. A diferença é que, sem o Pro, você não consegue salvar 50 hosts.
A mesma divisão entre Free e Pro vale para o resto do app. O Free não tem limite de painéis. Ele limita uma Control Room (antes War Room) a 2 membros por sala (o Pro não tem limite de membros) e salva 1 Máquina.
Nada disso é necessário para gerenciar 50 servidores. Só entra em jogo se você também usa Claude Code, Codex ou Gemini CLI nesses servidores junto com as suas sessões SSH.
Comparação com iTerm2, Warp, Termius e MobaXterm para uma frota de servidores
O iTerm2 é um emulador de terminal maduro, gratuito e só para macOS, com ótima integração com o tmux e gerenciamento de perfis. Os perfis e o gerenciador de senhas com Keychain cobrem bastante coisa, mas ele não traz um gerenciador de hosts SSH dedicado, com filtros de grupo ou HUD de telemetria. Você teria que montar isso sozinho com tmux, dotfiles e ferramentas de monitoramento separadas.
O Warp é um terminal moderno com IA na mesma janela do shell. É uma boa escolha se você quer ajuda de IA para escrever comandos e executar agentes. Ele não foi feito em torno de dezenas de hosts SSH salvos com grupos e estatísticas de servidor. O MXterm Pro foi feito para vários agentes em painéis divididos.
O Termius é o concorrente mais próximo aqui. Sincronização de hosts SSH entre dispositivos, app para celular e um organizador de hosts maduro são pontos fortes de verdade, e, se você precisa da lista de hosts no celular, ele é a melhor opção. Ele não executa vários agentes de código de IA lado a lado nem cria um git worktree por agente.
O MobaXterm continua sendo a ferramenta mais completa para quem usa Windows e precisa de X11 forwarding e túneis junto com o SSH, mas não tem versão para macOS nem orquestração de agentes de IA.
A Control Room multiagente do MXterm Pro executa vários agentes (Claude Code, Codex, Gemini CLI e outros) em painéis divididos. Quando o isolamento por worktree está ligado, cada painel de agente ganha o seu próprio git worktree em <repo>/.worktrees/<slug>, o que reduz a chance de o erro de um agente tocar na cópia de trabalho de outro.
O ⌘J Command Recipes compara o que você digita com um conjunto embutido de comandos Linux prontos. É busca por palavra-chave, não um modelo escrevendo bash.
Como começar
Baixe o MXterm Pro e teste o SSH Host Manager com quantos hosts você tem hoje. Grupos, importação, multiplexação, broadcast e o HUD de telemetria estão todos disponíveis no plano Free.
O único obstáculo que você vai encontrar numa frota de 50 servidores de verdade é o limite de 5 hosts salvos. Os hosts ilimitados do Pro são o que te leva além dele.
SSH com vários painéis, Command Recipes (Cmd+J) e uma Control Room (antes War Room) multiagente: comece grátis.
Já tem o MXterm Pro? Leia o guia de configuração →
Novo no MXterm Pro? Veja os preços →
Perguntas frequentes
As senhas SSH salvas vão para o repositório de credenciais do sistema (Keychain do macOS, no Mac) sob o nome de serviço com.mxterm.desktop.ssh, e não para o arquivo de configurações do app. A senha de uma chave (passphrase) não é salva. O caminho de um arquivo de chave (~/.ssh/id_ed25519) não é segredo, então fica na lista de hosts. O painel de arquivos, as transferências e a barra de estatísticas usam BatchMode=yes e não conseguem pedir a senha, ao contrário do painel de terminal.
Sim. ⌘⇧B ativa o recurso com todos os painéis da aba atual no grupo. Option/Alt+clique alterna um painel, Limpar esvazia o grupo e Selecionar tudo o enche de novo. Um banner fixo "Broadcast ON · N panes" fica visível e Esc sai na hora. Não há confirmação a cada tecla, então reduza o grupo primeiro. A proteção é um banner difícil de não ver e fácil de limpar, não uma pergunta de confirmação.
Não. O plano Free limita os hosts SSH salvos a 5, e o Pro remove esse limite. Grupos, filtros, importação, multiplexação, broadcast e o HUD de telemetria funcionam igual nos dois planos. A quantidade de hosts é o limite que uma frota de 50 servidores vai atingir.
Não há agente persistente. Cada atualização executa um one-liner de python3 de curta duração pela sua conexão SSH existente para ler a carga de CPU, /proc/meminfo, o uso de disco e /proc/uptime, e termina. O único requisito é o python3 no host remoto; sem ele, a barra de estatísticas fica vazia.
Sim. Desde a 1.0.21, cada host salvo tem um campo Jump host / bastion (encadeie vários com vírgulas) e uma opção Encaminhar agente SSH. Importar o ~/.ssh/config ainda ignora linhas ProxyJump, então defina o jump host dos hosts importados você mesmo. Digitar seu alias de ssh existente em um painel de shell comum também funciona como no Terminal.app, mas sem o grupo desse host nem as estatísticas do servidor do fluxo Conectar gerenciado.
O importador lê as linhas Host, HostName, User, Port e IdentityFile e cria um host salvo por entrada Host que tenha HostName. Blocos curinga Host * e entradas sem HostName são ignorados, e só o primeiro IdentityFile é mantido. Ele não interpreta ProxyJump, blocos Match nem outras diretivas avançadas. Elas continuam valendo se você digitar o alias direto em um painel de shell.