---
title: "SSH nativo para os agentes do Comma · Blog do Comma"
description: "O agente continua no harness e alcança suas máquinas por SSH, por um endereço público, pelo Tailcat ou pela sua própria tailnet."
url: https://comma.surf/pt/blog/native-ssh
language: pt-BR
---

[Voltar ao blog](https://comma.surf/pt/blog)

19 de outubro de 2026

# SSH nativo para os agentes do Comma

[Começar](https://app.comma.surf/) [Ler a documentação](https://comma.surf/pt/docs/salix/agent-runtimes)

Seu servidor doméstico parou de concluir o backup noturno. Os logs estão no servidor, o servidor está atrás do seu roteador, e você quer que o [Comma](https://comma.surf/pt/) descubra o que aconteceu, não que entregue uma lista de comandos para você ficar copiando de um lado para o outro. Agora os agentes do Comma podem trabalhar nessa máquina por SSH, sem instalar outro agente de IA nela.

## O agente vive fora do sandbox

A maioria dos agentes na nuvem roda dentro do próprio sandbox: um contêiner ou uma VM que guarda o loop do modelo, as ferramentas e os arquivos, e fica ligado enquanto o agente existir. O Salix, harness distribuído por trás do Comma, separa essas partes. O loop do agente roda no harness, fora de qualquer sandbox, com mais de 100 agentes por núcleo de CPU. Uma VM na nuvem ou um dispositivo é só um lugar onde comandos rodam, usado apenas quando o trabalho precisa de um computador.

Por isso, para trabalhar no seu servidor, o agente não se muda para lá. Ele chama ferramentas SSH nativas a partir do harness:

- `ssh.open`, `ssh.write`, `ssh.read` e `ssh.screen` para um terminal interativo, inclusive programas em tela cheia;
- `ssh.exec` para um único comando, com stdout, stderr e o código de saída separados;
- `ssh.list_files`, `ssh.download` e `ssh.upload` para arquivos, via SFTP;
- `ssh.close` e `ssh.list` para o ciclo de vida da conexão.

O agente se autentica com uma **chave SSH do Group**: uma chave por espaço de trabalho, compartilhada pelos seus agentes. `ssh.public_key` retorna essa chave, e você a adiciona a `~/.ssh/authorized_keys` na máquina, como faria com qualquer outro cliente SSH.

O harness pode chegar à sua máquina de três jeitos.

## 1. Um endereço público

Se a máquina já tem um servidor SSH acessível, o agente se conecta ao endereço IP ou ao nome DNS dela:

json

```
{ "tool": "ssh.open", "params": { "host": "203.0.113.10", "user": "deploy" } }
```

## 2. Tailcat, para uma máquina sem endereço público

Um notebook ou um servidor doméstico atrás de NAT muitas vezes não tem um endereço que o harness consiga alcançar. O [Tailcat](https://github.com/tailscale/tailcat) faz a conexão sem porta de entrada, sem VPN e sem conta. Ele roda na máquina, só abre conexões de saída e mostra um endereço que começa com `tc`.

O Tailcat também pode ser o servidor SSH. Rode-o com a chave pública do Group:

sh

```
tailcat serve --ssh-authorized-keys='ssh-ed25519 AAAA...' ssh
```

Isso oferece um shell de login, execução de comandos e SFTP com a conta que roda o Tailcat. Não precisa de `sshd` e não altera sua configuração de SSH. Se a máquina já roda OpenSSH, use `tailcat serve 22`, e o OpenSSH cuida do login. Depois, envie o endereço ao agente:

json

```
{ "tool": "ssh.open", "params": { "tailcat": "tc...", "user": "deploy" } }
```

## 3. Sua própria rede Tailscale

Se suas máquinas já estão em uma tailnet, o espaço de trabalho pode entrar nela. Conecte-o nas configurações do app do Comma ou peça ao agente. Um admin da tailnet abre um link de login e aprova o nó. Por padrão, o nó usa a tag `tag:comma-agent`, então a política da sua tailnet decide exatamente quais dispositivos e portas ele alcança, por exemplo, só a porta 22 do servidor doméstico.

O agente lista os dispositivos com `tailnet.peers` e se conecta pelo nome MagicDNS ou pelo endereço Tailscale:

json

```
{
  "tool": "ssh.open",
  "params": { "host": "nas.tail1234.ts.net", "via_tailnet": true, "user": "deploy" }
}
```

## Confiança e tempo de vida

Em qualquer caminho, a primeira conexão a um host registra a chave de host dele. Uma conexão posterior que apresente uma chave diferente é recusada com `host_key_mismatch` e as duas impressões digitais, e o agente pergunta a você antes de remover a chave antiga com `ssh.known_hosts.remove`.

Uma conexão SSH pertence a uma única sessão do agente. Ela fecha após 30 minutos sem uso e não sobrevive a um reinício do agente nem a um deploy da plataforma, então trabalhos longos devem ficar em `tmux` ou `screen` na máquina remota. Os comandos têm limite: `ssh.exec` expira após 60 segundos por padrão e 600 no máximo, e um timeout é informado, nunca repetido automaticamente.

Para o backup, você poderia pedir: “Leia os logs e verifique o espaço em disco, mas não apague arquivos nem altere a configuração. Primeiro me diga o que encontrou.”

[Voltar ao blog](https://comma.surf/pt/blog)

## Try Comma, Now.

[Começar](https://app.comma.surf/)
