---
title: "SSH nativo per gli agenti di Comma · Blog di Comma"
description: "L'agente resta nell'harness e raggiunge le tue macchine via SSH, tramite un indirizzo pubblico, con Tailcat o attraverso la tua tailnet."
url: https://comma.surf/it/blog/native-ssh
language: it
---

[Torna al blog](https://comma.surf/it/blog)

19 ottobre 2026

# SSH nativo per gli agenti di Comma

[Inizia](https://app.comma.surf/) [Leggi la documentazione](https://comma.surf/it/docs/salix/agent-runtimes)

Il tuo server di casa non completa più il backup notturno. I log sono sul server, il server è dietro il tuo router, e vuoi che [Comma](https://comma.surf/it/) scopra cosa è successo, non che ti dia una lista di comandi da copiare avanti e indietro. Ora gli agenti di Comma possono lavorare su quella macchina via SSH, senza installarci un altro agente IA.

## L’agente vive fuori dalla sandbox

La maggior parte degli agenti cloud gira dentro la propria sandbox: un container o una VM che contiene il loop del modello, gli strumenti e i file, e resta accesa finché esiste l’agente. Salix, l’harness distribuito alla base di Comma, separa queste parti. Il loop dell’agente gira nell’harness, fuori da qualsiasi sandbox, con oltre 100 agenti per core di CPU. Una VM cloud o un dispositivo è solo un posto in cui girano i comandi, usato soltanto quando il lavoro richiede un computer.

Quindi, per lavorare sul tuo server, l’agente non si sposta lì. Chiama strumenti SSH nativi dall’harness:

- `ssh.open`, `ssh.write`, `ssh.read` e `ssh.screen` per un terminale interattivo, compresi i programmi a schermo intero;
- `ssh.exec` per un singolo comando, con stdout, stderr e codice di uscita tenuti separati;
- `ssh.list_files`, `ssh.download` e `ssh.upload` per i file, via SFTP;
- `ssh.close` e `ssh.list` per il ciclo di vita della connessione.

L’agente si autentica con una **chiave SSH del Group**: una chiave per workspace, condivisa dai suoi agenti. `ssh.public_key` la restituisce, e tu la aggiungi a `~/.ssh/authorized_keys` sulla macchina, come faresti con qualsiasi altro client SSH.

L’harness può raggiungere la tua macchina in tre modi.

## 1. Un indirizzo pubblico

Se la macchina ha già un server SSH raggiungibile, l’agente si connette al suo indirizzo IP o al suo nome DNS:

json

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

## 2. Tailcat, per una macchina senza indirizzo pubblico

Un portatile o un server di casa dietro NAT spesso non ha un indirizzo che l’harness possa contattare. [Tailcat](https://github.com/tailscale/tailcat) lo collega senza porte in ingresso, VPN o account. Gira sulla macchina, apre solo connessioni in uscita e stampa un indirizzo che inizia con `tc`.

Tailcat può anche fare da server SSH. Avvialo con la chiave pubblica del Group:

sh

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

Così ottieni una shell di login, l’esecuzione di comandi e SFTP con l’account che esegue Tailcat. Non serve `sshd` e la tua configurazione SSH resta com’è. Se sulla macchina gira già OpenSSH, usa invece `tailcat serve 22`, e il login lo gestisce OpenSSH. Poi invia l’indirizzo all’agente:

json

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

## 3. La tua rete Tailscale

Se le tue macchine sono già in una tailnet, il workspace può unirsi a essa. Collegalo nelle impostazioni dell’app Comma, oppure chiedilo all’agente. Un amministratore della tailnet apre un link di accesso e approva il nodo. Per impostazione predefinita il nodo usa il tag `tag:comma-agent`, quindi è la policy della tua tailnet a decidere esattamente quali dispositivi e porte può raggiungere, per esempio solo la porta 22 del server di casa.

L’agente elenca i dispositivi con `tailnet.peers` e si connette tramite nome MagicDNS o indirizzo Tailscale:

json

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

## Fiducia e durata

Su ogni percorso, la prima connessione a un host registra la sua chiave host. Una connessione successiva che presenta una chiave diversa viene rifiutata con `host_key_mismatch` ed entrambe le impronte, e l’agente ti chiede conferma prima di rimuovere la vecchia chiave con `ssh.known_hosts.remove`.

Una connessione SSH appartiene a una sola sessione dell’agente. Si chiude dopo 30 minuti di inattività e non sopravvive a un riavvio dell’agente né a un deploy della piattaforma, quindi il lavoro lungo va eseguito in `tmux` o `screen` sulla macchina remota. I comandi hanno dei limiti: `ssh.exec` va in timeout dopo 60 secondi per impostazione predefinita e al massimo dopo 600, e un timeout viene segnalato, mai ritentato in automatico.

Per il backup potresti chiedere: «Leggi i log e controlla lo spazio su disco, ma non eliminare file e non modificare la configurazione. Prima dimmi cosa trovi.»

[Torna al blog](https://comma.surf/it/blog)

## Try Comma, Now.

[Inizia](https://app.comma.surf/)
