O Codex se conecta aos seus servidores por MCP (em inglês): adicione uma entrada de servidor do Termalin à seção mcp_servers do ~/.codex/config.toml, e o Codex executa comandos e lê ou grava arquivos nos seus hosts — sem nunca guardar uma chave. A configuração leva uns vinte minutos. (Se você só quer o Codex em uma máquina que já acessa por SSH, as próprias conexões remotas do app do Codex fazem isso com a sua própria chave e o comando codex instalado na máquina remota — sem precisar de MCP.)
Por que a rota via MCP e não a óbvia? O Codex é confortável dentro de um repositório. A tarefa que faz você procurar acesso aos servidores é justamente a que sai dele — o deploy falhou, a migração travou, o serviço não volta na máquina de verdade. A correção tentadora é deixar o próprio Codex rodar o ssh: ele já executa comandos de shell na sua máquina, então, se uma chave está desbloqueada em ~/.ssh ou em um ssh-agent em execução, o ssh prod funciona para ele sem que você decida nada. Isso não é “dar acesso ao Codex” — é descobrir que você o entregou por padrão.
É o mesmo formato das configurações do Claude Code (em inglês) e do Cursor; abaixo está a versão específica do Codex, passo a passo.
Por que o Codex diz que o SSH não é permitido no sandbox dele
Peça ao Codex para fazer ssh em uma máquina e normalmente ele não fará: o comando volta bloqueado, ou o Codex se detém para pedir uma aprovação que uma execução sem supervisão não consegue conceder. Isso é o comportamento projetado. O Codex roda os seus comandos dentro de um sandbox com acesso à rede e à escrita cercado, justamente para que um agente confuso ou injetado não consiga alcançar a sua infraestrutura por conta própria — e uma conexão SSH de saída é exatamente o tipo de coisa que essa cerca existe para barrar.
As soluções alternativas que circulam removem a cerca em vez de trabalhar com ela:
- Flags de bypass. O
codex --dangerously-bypass-approvals-and-sandbox(e o--full-auto) desligam o sandbox para que osshpasse. Só que a flag não se limita ao SSH — ela abre mão das aprovações e do sandbox para todos os comandos daquela execução. Você desbloqueou uma coisa e tirou a proteção de tudo. sshpass. Osshpass -p 'hunter2' ssh user@hostfornece uma senha de forma não interativa. Ele coloca a senha em texto puro na linha de comando — visível na lista de processos e no histórico do shell — e ensina o agente a carregar uma credencial de servidor, exatamente o hábito que vale a pena evitar.- Uma chave no sandbox. Montar
~/.sshou exportar uma chave para o ambiente do Codex funciona, mas, uma vez que a chave passou pelo contexto do agente, você não consegue provar que ela não vazou; a classificação por raio de impacto (em inglês) coloca isso em último lugar por um motivo, e a única correção honesta depois é rotacionar a chave em todo lugar onde ela é confiável.
Os três respondem “como faço o SSH passar pelo sandbox” quando a pergunta melhor é “como o agente roda um comando no meu servidor sem guardar a chave nem desligar o sandbox”. É essa a rota via MCP abaixo. O Termalin faz a conexão SSH; o Codex chama uma ferramenta. O sandbox continua ligado para todo o resto que o Codex faz e, como o session_open / session_exec mantêm uma sessão persistente, o agente ganha um shell de verdade com estado — um cd, uma variável exportada, um processo de longa duração sobrevivem todos entre as chamadas — em vez de uma sequência de disparos desconexos.
O que você precisa
- Termalin — o app de desktop; o plano Free já basta. É com o servidor MCP integrado dele que o Codex vai falar.
- A CLI do Codex, na mesma máquina.
- Um host salvo no Termalin. Escolha algo que você não se importe de deixar um agente cutucar na primeira vez — staging, um VPS de brincadeira.
Passo 1 — ative o acesso do agente e defina uma política
O acesso do agente vem desativado por padrão. No Termalin, abra Configurações → Acesso do agente (MCP), ative-o e marque os hosts que o Codex pode alcançar. Nada fora dessa lista existe do ponto de vista do agente; adicionar um host é uma decisão que você toma no app, não algo em que o Codex consiga entrar na base da conversa.
Duas coisas acontecem por baixo dos panos. O Termalin grava um inventário de hosts para o servidor MCP com entradas de autenticação só para o agente — nenhuma senha ou chave vai parar nesse arquivo. E a autenticação fica com a custódia de chaves do app: você desbloqueia uma vez, e o Termalin assina em nome do agente. Não há arquivo de chave para o Codex ler, então não há nada para vazar — o que também fecha a porta dos fundos de ~/.ssh lá de cima.
Enquanto está nas configurações, defina a política do agente de cada host: acesso total, uma lista de comandos permitidos ou bloqueado. Para qualquer coisa com que você se importe, comece por uma lista de comandos permitidos — a lista mais curta que permita ao Codex fazer o trabalho que você tem em mente.
Passo 2 — registre o servidor no config.toml
O Codex lê os servidores MCP da seção mcp_servers do ~/.codex/config.toml. Adicione uma entrada apontando para o binário termalin-mcp incluído:
[mcp_servers.termalin]
command = "<path>/termalin-mcp"
Versões recentes do Codex podem adicioná-lo pela linha de comando em vez disso — com o mesmo resultado:
codex mcp add termalin -- <path>/termalin-mcp
É essa a integração inteira, e a mesma configuração move o Codex na IDE. Reinicie o Codex, confirme que o servidor aparece como conectado, e as ferramentas surgem para o agente: hosts_list, ssh_exec, sessões persistentes (session_open / session_exec), leituras e escritas de SFTP e encaminhamentos de porta. A lista completa de ferramentas (em inglês) documenta cada uma.
Um hábito do Codex que vale guardar para as primeiras sessões: deixe as aprovações de comando dele ligadas. O Codex pergunta antes de agir, a não ser que você diga para não perguntar — ainda não diga. Amplie isso do mesmo jeito que você amplia a lista de hosts: uma coisa sem graça por vez, depois de ter observado como ele se comporta.
Passo 3 — dê a ele uma tarefa de verdade
Pule o comando de demonstração. Entregue algo que você realmente faria:
O deploy para a staging-1 terminou, mas o health check está oscilando. Descubra por quê e corrija.
O Codex chama hosts_list, vê a staging-1, abre uma sessão e começa a puxar os fios — status do serviço, as últimas cem linhas de log, o diff da configuração contra o que está rodando. Ele propõe uma correção, aplica dentro da política que você definiu e confirma que o check fica verde.
O motivo de isso ser confortável, em vez de angustiante, é que nada disso é invisível. Toda sessão que o Codex abre aparece no Termalin como uma aba de terminal ao vivo, e a grade de monitoramento (em inglês) mostra todas as sessões abertas lado a lado, com os blocos conduzidos pelo agente brilhando. Você está vendo os comandos caírem enquanto rodam, não lendo um resumo depois — e pode intervir no meio da sessão a qualquer momento.
Onde ficam os limites
Os padrões que vale conhecer antes de apontar o Codex para qualquer coisa que importe:
- As suas chaves nunca entram no ambiente do Codex. A custódia assina; o agente pede. Revogar o acesso é uma opção em Configurações, não uma rotação de chaves por toda a sua frota.
- O alcance dele é a lista de hosts que você marcou no Passo 1, e a política de comandos de cada host limita o que ele pode rodar lá. “Total” em produção ainda é um shell completo — defina isso com cuidado.
- Digitar na sua sessão é algo à parte. Por padrão, o Codex abre as próprias sessões; entrar em uma que você já tem aberta é uma opção de consentimento própria. Ele nunca pega carona em silêncio.
- Cada comando fica registrado. As gravações de sessão capturam apenas a saída — nunca as teclas — e cada comando do agente é marcado como dele (em inglês) no registro de auditoria, com o dispositivo e o IP de onde veio. “Foi o agente que fez isso” é um filtro que você aplica, não uma história que você reconstrói.
Quando o Codex roda onde o seu desktop não está
Se o Codex roda em CI ou em um sandbox na nuvem, e não no seu notebook, o binário stdio local não está acessível — mas o endpoint MCP hospedado do Termalin está. Onde alguém pode fazer login, adicione https://termal.in/mcp ao Codex como um servidor MCP remoto e aprove uma vez na página de login do Termalin (OAuth, sem chave para colar). Para execuções sem supervisão, crie uma chave de API no painel web, restrinja-a aos servidores que aquele job deve tocar, deixe-a somente leitura ou com uma lista de comandos permitidos, e dê a ela uma validade. O endpoint alcança os seus servidores cadastrados com um Connector sem chave, autenticando cada execução com um certificado de curta duração — nenhuma chave entregue, nada permanente. O padrão completo, com um exemplo de pipeline para copiar e colar, está em dar a um agente acesso SSH em CI/CD (em inglês).
O hábito que faz pegar
Trate a primeira semana como a integração de um colega que digita muito rápido. Mantenha a grade de monitoramento aberta. Dê ao Codex tarefas com um estado-final claro — “fazer o health check passar”, “renovar o certificado” — e leia como ele chega lá. Mantenha as aprovações ligadas até ele ter conquistado a aprovação automática para as ferramentas chatas, e amplie a lista de hosts uma máquina sem graça por vez.
A assimetria é o ponto inteiro: o Codex ganha alcance de verdade, e você mantém a única coisa que não pode ser tirada de volta depois que sai.
O Termalin é um cliente SSH multiplataforma com um servidor MCP integrado, uma custódia de chaves e política de agente por host. Comece pela página Codex SSH, leia a referência MCP ou baixe o app — o plano Free não tem limite de hosts.