Gerenciador de sessões SSH/RDP com terminal em abas. As sessões ficam num arquivo YAML legível e versionável, sem limite de quantidade.
- Árvore de sessões com pastas e busca; criar, editar e excluir sessões
- Terminal SSH embutido em abas (xterm.js + node-pty), usando o OpenSSH do sistema
- Login por chave via agente SSH (ssh-agent do Windows, KeePassXC)
- RDP numa aba (cliente FreeRDP embutido), ou no cliente do Windows (
mstsc) pelo menu - Importação de sessões de outro arquivo YAML ou de um inventário do Ansible (INI/YAML)
- Exportação das sessões (todas ou uma pasta), dos sites de VPN ou de um backup completo para levar tudo a outra máquina
- Ferramentas de rede: ping, traceroute, consulta DNS, consulta SNMP (v1/v2c/v3), scanner de portas, scanner de rede, portas abertas locais, Wake-on-LAN e captura de pacotes
- Servidores locais TFTP, FTP/FTPS e HTTP para trocar arquivos com equipamentos, Iperf (iperf3) para medir banda, SSH/SFTP, Telnet, NFS somente leitura e VNC (experimentais) e um agendador de comandos (cron)
- Agente MCP: um agente de IA (configurado por você) lê e opera os terminais que você compartilhar, com aprovação de cada comando
- VPN IPsec sem instalar nada (motor próprio, IKEv1 + XAuth), com editor de sites, botão próprio na barra (com o estado) e sessões que conectam a VPN antes de abrir
- Tela de ajuda e atualização automática pelas releases do GitHub
Baixe o instalador MultTerm-setup-<versão>.exe na página de
releases e execute. A instalação é por
usuário (não pede administrador). O instalador não é assinado: o SmartScreen avisa na
primeira execução (Mais informações → Executar assim mesmo).
O próprio app verifica novas versões ao abrir e em Ajuda → Buscar atualizações.
version: 1
defaults:
identityFile: ~/.ssh/id_ed25519 # opcional: chave das sessões SSH sem chave própria
sessions:
- name: web-01
folder: Servidores/Produção
type: ssh # ssh (padrão) ou rdp
host: web-01.example.org
user: deploy
identityFile: ~/.ssh/deploy # opcional: vazio = chave padrão ou agente SSH
vpn: Matriz # opcional: site de VPN conectado antes de abrir
- name: ad-01
folder: Servidores/Infraestrutura
type: rdp
host: 10.0.0.9 # porta omitida = padrão (22 ssh / 3389 rdp)A gravação é determinística (ordenada por pasta e nome, campos em ordem fixa) para gerar
diffs limpos. No app, o arquivo padrão fica em %APPDATA%\MultTerm\sessions.yaml; use
Arquivo → Abrir arquivo de sessões… para apontar para um arquivo versionado (a escolha é lembrada) ou defina
a variável MULTTERM_SESSIONS.
A chave privada de cada sessão SSH pode ser escolhida pelo explorador de arquivos (Procurar…
ao lado do campo); um arquivo dentro da pasta do usuário é gravado como ~/..., que vale em outra
máquina. Em Arquivo → Chave SSH padrão… fica a chave usada por todas as sessões SSH que não têm
a sua (gravada em defaults no arquivo de sessões, vai junto no backup completo); sem chave padrão
nem própria, vale o agente SSH.
A barra superior tem só o que se usa toda hora: + Nova sessão e Ferramentas à esquerda; VPN, Agente e Ajuda à direita. O resto fica no menu do topo:
- Arquivo: nova sessão, nova pasta, abrir/recarregar o arquivo de sessões, chave SSH padrão, Importar e Exportar (sessões, sites de VPN ou backup completo) e sair.
- Sessão: conectar, janela externa, Wake-on-LAN, editar e excluir a sessão selecionada.
- Ferramentas: terminal local, ferramentas de rede, servidores, VPN e agente.
- Exibir: mostrar/ocultar a barra lateral, zoom (Ctrl + / Ctrl - / Ctrl 0) e tela cheia (F11).
- Ajuda: ajuda (F1), verificar atualizações, página do projeto e sobre.
O menu quase não tem atalhos de teclado de propósito: eles valeriam antes do terminal e roubariam teclas do bash, do tmux e de outros programas (Ctrl+N, Ctrl+O, Ctrl+B, F5...).
- Duplo clique numa sessão abre uma aba: terminal (SSH) ou área de trabalho remota (RDP).
- Botão direito numa sessão: Conectar, Janela externa, Ligar (Wake-on-LAN, se a sessão tem MAC), Ping, Traceroute, Scanner de portas, Consulta SNMP, Editar e Excluir… (com confirmação; com várias selecionadas, Excluir as N selecionadas…).
- Várias sessões: Ctrl+clique adiciona ou tira sessões da seleção e Shift+clique seleciona um intervalo (Esc limpa); botão direito numa delas → Conectar as N selecionadas.
- Botão direito numa pasta: Conectar todas, Nova subpasta, Nova sessão aqui, Renomear (move as sessões e subpastas) e Excluir (só pastas vazias). Na área vazia da árvore: Nova pasta. Uma pasta nova é gravada no arquivo quando uma sessão é salva dentro dela.
- Selecionar texto copia; botão direito cola (ou Ctrl+Shift+C / Ctrl+Shift+V).
- Botão do meio do mouse fecha a aba; quando a sessão termina, R reconecta.
- Chave
.ppk(PuTTY): o app usa a versão OpenSSH com o mesmo nome ao lado, se existir. - Janela externa abre a sessão no Windows Terminal.
- Ordem das abas: arraste uma aba para outra posição, use o botão direito na aba (Mover para a esquerda/direita/início/fim) ou Ctrl+Shift+PageUp/PageDown na aba ativa.
- Arrastar uma aba de terminal para fora da barra de abas a destaca numa janela própria, aberta onde a aba foi solta (soltar perto da barra não destaca).
- Layout da área de abas (ícones no canto direito da barra de abas): uma aba, duas lado a lado ou duas empilhadas. Na tela dividida, uma aba só muda de metade de propósito: arrastando a aba para a metade, pelo botão direito na aba (Mostrar na metade…) ou, ao clicar numa aba fora de vista com as duas metades ocupadas, escolhendo a metade no menu que aparece (ele diz qual aba sai). Clicar dentro de uma metade passa o foco para ela (com borda destacada). O layout fica lembrado.
- Switches e servidores antigos que só falam algoritmos SHA-1/ssh-rsa/CBC (o ssh recusa com
"no matching key exchange method found"): a aba oferece Permitir algoritmos antigos nesta
sessão e reconectar, que vale só para aquela sessão (opção Aceitar algoritmos antigos no
formulário, gravada como
legacySsh: true). Só entram os algoritmos que osshlocal suporta. - F1 ou o botão Ajuda abre a tela de ajuda.
No menu Ferramentas (cada uma abre numa aba; o host da sessão selecionada vem preenchido):
-
Ping / Traceroute — rodam num terminal embutido; ping sem quantidade é contínuo (Ctrl+C para parar) e R executa de novo.
-
Consulta DNS — A, AAAA, CNAME, MX, TXT, NS, SOA e SRV; IP faz a consulta reversa (PTR). Usa os servidores DNS do sistema ou um IP informado.
-
Consulta SNMP — v1/v2c (community) ou v3 (usuário, nível de segurança, autenticação MD5/SHA-1/SHA-2 e criptografia DES/AES); operações get, getnext, getbulk e walk; OIDs numéricos ou nomes comuns (
sysName,ifDescr…), com valores formatados. As credenciais não são gravadas. -
Scanner de portas — lista e faixas (
22,80,8000-8100) ou predefinições (comuns,web,bancos,windows); mostra aberta, fechada ou filtrada. Exporta CSV. -
Scanner de rede — CIDR (
10.0.0.0/24), faixa (10.0.0.10-50) ou lista; descobre hosts por conexão TCP (22, 80, 443, 445, 3389), mostra nome e portas e cria sessões a partir do resultado. O nome vem do DNS reverso; com SNMP configurado (v1/v2c/v3), hosts sem DNS reverso são consultados pelosysName. A coluna Fonte indica a origem do nome. -
Portas abertas locais — conexões e portas em escuta desta máquina com o processo dono (Windows), com filtro e atualização automática.
-
Wake-on-LAN — envia o pacote mágico para um MAC (broadcast e porta configuráveis); com o campo MAC preenchido na sessão, liga a máquina pelo botão direito.
-
Captura de pacotes — escolhe a interface, um filtro de captura (BPF, ex.:
host 10.0.0.5) e limites opcionais; mostra a contagem ao vivo e grava.pcapngemDocumentos\MultTerm\Capturas, com atalho para abrir no Wireshark. Requer o Wireshark com o Npcap instalados (o app usa odumpcap); sem eles, a ferramenta explica como instalar. Sem o Wireshark, a captura usa o pktmon do Windows (10 1809+ / 11): filtros de IP, porta e protocolo em todas as placas de rede, mostra o tamanho capturado ao vivo e converte para.pcapngao parar. O pktmon exige administrador: o Windows pede confirmação (UAC) a cada captura, só para ela (o app continua sem privilégios).
Nenhuma ferramenta exige rodar o app como administrador (a captura usa o Npcap no modo padrão, sem a opção "restringir a administradores"; o modo pktmon pede a elevação só durante a captura).
O botão Agente liga um servidor MCP local para que um agente de IA compatível com MCP — configurado por você, com a sua conta — leia e opere os terminais abertos. O MultTerm não fala com nenhum serviço de IA: ele só expõe ferramentas ao agente.
- Nada é compartilhado por padrão. Para cada aba de terminal você escolhe: não compartilhar, somente leitura, aprovar cada envio (o MultTerm mostra exatamente o que será digitado e em qual aba, com Permitir / Permitir sempre nesta aba / Recusar) ou controle livre. Abas compartilhadas ganham uma marca (◉); Definir todas aplica um modo a todas as abas de uma vez e Parar de compartilhar tudo corta o acesso na hora.
- Ferramentas:
list_terminals,read_terminal(a saída como texto, sem cores),run_command(digita, aperta Enter e devolve a saída quando ela para),send_inputesend_keys(Enter, Ctrl+C, setas...). Os comandos rodam nos servidores reais das sessões. - Conexão só em
127.0.0.1, com token (guardado cifrado); pedidos de navegador são recusados. A tela do agente mostra a configuração pronta para colar: stdio (o próprio executável do MultTerm faz a ponte) ou HTTP (endereço e token). - Tudo o que o agente lê ou envia fica no registro de atividade.
- Abrir o agente no MultTerm: escolha o agente na lista e clique em Abrir o agente — ele abre numa aba de terminal local, já ligado ao servidor, com a conta que você tem nele nesta máquina. A lista mostra os agentes encontrados na máquina (no PATH e nos caminhos de instalação comuns), com a versão; os não instalados aparecem desabilitados, e Procurar de novo refaz a busca depois de instalar um. Por enquanto o catálogo tem o Claude Code.
Ferramentas → Terminal local abre PowerShell, Prompt de comando ou WSL numa aba, com a mesma cópia/cola e reabertura (R) das abas SSH.
Clique com o botão direito numa aba de terminal → Abrir em janela separada para levá-la a uma janela própria (útil para ver duas sessões lado a lado ou em outro monitor). A sessão não é reiniciada: a tela é redesenhada e o processo segue. Na janela separada, Devolver à janela principal traz a aba de volta; o compartilhamento com o agente vai junto.
Fechar a janela separada (X ou Alt+F4) também devolve as abas à janela principal, sem reiniciar as sessões; para encerrar uma sessão, feche a aba. Fechar a janela principal encerra o MultTerm, inclusive as janelas separadas.
Ferramentas → Servidores inicia e para servidores locais, cada um com porta, pasta raiz,
"parar depois de N segundos" (1 hora por padrão) e log com horário; as configurações ficam
lembradas e todos param ao sair do MultTerm. Os arquivos ficam em Documentos\MultTerm\Servidor
(ou na pasta escolhida) e nenhum servidor sai da pasta raiz.
Escutar em escolhe onde cada servidor atende: todas as interfaces, só esta máquina
(127.0.0.1) ou uma placa de rede específica (a lista mostra as placas com o IPv4 de cada uma).
Fora do localhost, o log lembra de liberar a porta no Firewall do Windows se os equipamentos não
conseguirem conectar.
- TFTP (porta 69): baixar e enviar firmware e configurações de equipamentos, com negociação de bloco (até 64 KB), tamanho e timeout, arquivos grandes, opção de bloquear envio ou sobrescrita e aviso do Windows a cada transferência.
- FTP (porta 21): usuário e senha (guardada cifrada pelo Windows, nunca em texto puro), anônimo só leitura opcional, modos passivo e ativo, retomada, renomear e apagar; FTPS implícito opcional com certificado autoassinado gerado na primeira vez; opção de perguntar antes de aceitar cada conexão.
- HTTP (porta 8080): serve a pasta só para leitura, com listagem opcional,
index.htmle retomada de download. - SSH/SFTP (porta 22): usuário e senha do painel (cifrada), SFTP restrito à pasta raiz e shell
do Windows (PowerShell ou cmd) pelo ConPTY, inclusive
ssh usuário@ip comando. A chave de host ed25519 é gerada na primeira vez e a impressão digital aparece no log. - Telnet (porta 23): shell do Windows (PowerShell ou cmd) pelo ConPTY, com senha obrigatória e confirmação de cada conexão ligada por padrão. Não é cifrado: use só em rede confiável.
- Agendador (cron): tarefas no formato do crontab (
*/5 * * * * comando,0 7 * * mon-fri ...,@daily ...) rodadas no PowerShell ou no cmd enquanto o MultTerm estiver aberto, com a saída no log; pode iniciar junto com o app. - Iperf (porta 5201): compatível com o cliente
iperf3(TCP,-Re-P; UDP ainda não). O cliente iperf3 do Windows usa buffer de envio pequeno: para medir acima de ~600 Mbit/s, use-P 4ou-w 1M. - NFS (experimental, porta 2049 + portmapper na 111): NFSv3 somente leitura da pasta
raiz, exportada como
/, para equipamentos que fazem boot ou atualização por NFS (mount -t nfs -o vers=3,nolock <ip>:/ /mnt). TCP e UDP; MOUNT v1/v3. Clientes permitidos limita por IP ou faixa (10.0.0.0/24). O log mostra quem montou e quais arquivos foram lidos. Sem o portmapper (porta 111 ocupada), o cliente precisa deport=2049,mountport=2049. - VNC (experimental, porta 5900): compartilha a tela principal com qualquer visualizador VNC (TightVNC, RealVNC, TigerVNC...). Senha obrigatória (até 8 caracteres, limite do protocolo); somente visualização e perguntar antes de aceitar vêm ligados; com o controle ligado, mouse e teclado do visualizador agem neste computador. Clientes permitidos como no NFS. O VNC não cifra o tráfego: use só em rede confiável ou por um túnel (VPN, SSH). A tela segura do Windows (UAC, Ctrl+Alt+Del) não aparece. Acesso pelo navegador ainda não.
Na primeira vez, o Firewall do Windows pergunta se o MultTerm pode receber conexões na rede.
O botão VPN (barra superior, ao lado do Agente) conecta a VPNs IPsec/IKEv1 sem instalar nada: o próprio MultTerm negocia o IKEv1 (Main Mode, chave compartilhada com ou sem usuário e senha/XAuth, Mode Config) e cifra o tráfego (ESP em UDP 4500/NAT-T). O adaptador "MultTerm VPN" usa o Wintun que acompanha o instalador; criá-lo exige administrador, então o Windows pede confirmação (UAC) a cada conexão — só o processo do túnel roda elevado, o MultTerm não. IP, rotas e DNS ficam só na memória e somem ao desconectar.
- Novo site / Editar / Exportar… / Excluir / Importar site (.vpn)…: gateway, autenticação
(PSK, usuário lembrado, identificações), cliente (endereço, DNS), NAT-T, fragmentação, fases 1
e 2 e redes da VPN em CIDR. Um site novo já vem com AES-256, SHA-2 256 e DH 14. A chave
compartilhada nunca aparece na tela (em branco mantém a atual) e opções que o editor não
mostra são preservadas. Os sites ficam em
%APPDATA%\multterm\vpn-sitesno formato.vpn(o mesmo de outros clientes IPsec); na primeira vez, sites de um cliente IPsec instalado antes são copiados para lá. - Mostra o estado (conectando/conectada), o log da negociação e o motivo das falhas (gateway sem
resposta, chave ou senha recusadas, propostas que não conferem). O registro completo fica em
%TEMP%\multterm-vpn.log. - Conectada, mostra o IP recebido e as redes roteadas pelo túnel, com atalho para o scanner de rede — o caminho para descobrir os ativos do outro lado.
- A conexão é uma só e não depende da aba: o botão VPN na barra superior mostra o
estado (
VPN: <site>com um ponto colorido quando ligada) e abre a aba. Sair do MultTerm desconecta a VPN. - Uma sessão com o campo VPN preenchido abre a VPN primeiro e se conecta assim que ela sobe.
- Limites atuais: só chave compartilhada (sem certificados), Main Mode, NAT-T sempre ligado, IPv4.
Os menus Arquivo → Exportar e Arquivo → Importar oferecem:
- Sessões (abaixo).
- Sites de VPN: exporta todos os sites, um
.vpnpor site, numa pasta; importa um.vpn. - Backup completo: um arquivo
.multtermcom as sessões, os sites de VPN, as configurações dos servidores e a escolha do agente. Ao importar, sessões e sites que já existem são mantidos (só os novos entram) e as configurações dos servidores e do agente são substituídas. As senhas dos servidores e o token do agente não vão no backup (são cifrados para o seu usuário do Windows e não abririam em outra máquina): preencha de novo depois de importar. Os sites de VPN levam a chave compartilhada (PSK): guarde o backup com cuidado.
Arquivo → Exportar → Sessões… grava todas as sessões num YAML; Exportar pasta… (botão direito numa pasta) grava só a pasta e as subpastas, com os caminhos completos. O arquivo é o mesmo formato que Arquivo → Importar → Sessões… lê — serve de backup e para levar as sessões a outra máquina. Não há senhas no arquivo (o app não guarda senhas).
Arquivo → Abrir arquivo de sessões… é diferente: troca o arquivo de sessões que o app usa (por exemplo, um
sessions.yaml versionado no git), e a escolha é lembrada.
Arquivo → Importar → Sessões… (ou multterm import <arquivo>) detecta o formato do arquivo e mescla
com as sessões existentes (mesma pasta + nome não é sobrescrito):
- Sessões do MultTerm (YAML com
sessions:). - Inventário do Ansible (INI ou YAML): cada grupo vira uma pasta (grupos filhos viram
subpastas) e cada host uma sessão SSH, usando
ansible_host,ansible_port,ansible_usereansible_ssh_private_key_file(variáveis do host valem sobre as do grupo). Hosts comansible_connection=winrm/psrpviram sessões RDP; faixas comoweb[01:03]são expandidas; valores com template Jinja são ignorados com aviso.
- PowerShell como administrador:
Set-Service ssh-agent -StartupType Automatic; Start-Service ssh-agent - KeePassXC → Configurações → Agente SSH: habilitar e marcar Usar OpenSSH para Windows em vez do Pageant.
- Na entrada da chave (senha da chave no campo Senha), aba Agente SSH: escolher a chave privada (anexo ou arquivo) e marcar Adicionar ao agente quando o banco for aberto e Remover quando for fechado.
Sessões RDP abrem numa aba, com o cliente FreeRDP (Apache 2.0) que vem com o instalador encaixado na área da aba:
- O MultTerm pede usuário e senha ao conectar. A senha não é gravada: fica só na memória da
aba (para Reconectar sem digitar de novo) e vai ao cliente pela entrada padrão, nunca pela
linha de comando. Usuário no formato
DOMINIO\usuarioouusuario@dominio. - A resolução acompanha o tamanho da aba. Área de transferência compartilhada.
- Menus e diálogos do MultTerm que passam por cima da área escondem a sessão enquanto estão abertos (a área remota é uma janela nativa e ficaria por cima deles).
- Quando a sessão cai, a aba mostra o motivo em português (senha incorreta, porta fechada, conta bloqueada...) com Reconectar e Abrir no cliente do Windows.
- Servidores Windows antigos que só falam TLS 1.0 são recusados por padrão. A tela de erro
oferece Permitir TLS antigo nesta sessão e reconectar, que vale só para aquela sessão
(opção Aceitar TLS antigo no formulário, gravada como
legacyTls: true). - Janela externa (cliente do Windows) no botão direito abre no
mstsc, como antes. - Abrir em todos os monitores (botão direito na sessão ou na aba RDP): abre o cliente do
Windows em tela cheia usando todos os monitores, e o Windows remoto enxerga cada monitor
separado. Se a sessão estava numa aba, a aba fecha (a conexão nova assume a sessão remota). Com a
opção Abrir sempre em todos os monitores no formulário (
multimon: true), o duplo clique já abre assim. - Enviar Ctrl+Alt+Del (botão direito na aba RDP): pelo teclado, essa combinação fica no Windows local; pelo menu, vai para a sessão remota (bloquear, trocar a senha, gerenciador de tarefas).
- Abas RDP não podem ir para uma janela separada.
O wfreerdp.exe é compilado pelo workflow .github/workflows/freerdp.yml a partir do
código-fonte oficial (hash conferido) e publicado numa release auxiliar (freerdp-<versão>);
npm run fetch:freerdp o baixa para vendor/freerdp, conferindo o hash.
Ambiente, padrão de commits e branches, fluxo de PRs, testes e como gerar uma versão estão no CONTRIBUTING.md.
GPL-3.0. O instalador inclui o FreeRDP (Apache 2.0,
licença em resources/freerdp/LICENSE.txt) e o Wintun.