Tilbage til bloggen

Native SSH til Comma-agenter

Kom i gangLæs dokumentationen

Din hjemmeserver er holdt op med at gøre sin natlige backup færdig. Logfilerne ligger på serveren, serveren står bag din router, og du vil have Comma til at finde ud af, hvad der skete, ikke give dig en liste med kommandoer, du skal kopiere frem og tilbage. Commas agenter kan nu arbejde på maskinen over SSH, uden at du installerer endnu en AI-agent på den.

Agenten bor uden for sandkassen

De fleste cloud-agenter kører inde i deres sandkasse: en container eller VM, der rummer modelløkken, værktøjerne og filerne og kører, så længe agenten gør. Salix, den distribuerede harness bag Comma, skiller dem ad. Agentløkken kører i harnessen, uden for enhver sandkasse, med mere end 100 agenter pr. CPU-kerne. En cloud-VM eller en enhed er et sted, hvor kommandoer kører, og bruges kun, når arbejdet kræver en computer.

For at arbejde på din server flytter agenten altså ikke derhen. Den kalder native SSH-værktøjer fra harnessen:

  • ssh.open, ssh.write, ssh.read og ssh.screen til en interaktiv terminal, også med fuldskærmsprogrammer;

  • ssh.exec til én kommando, med stdout, stderr og exitstatus holdt adskilt;

  • ssh.list_files, ssh.download og ssh.upload til filer, over SFTP;

  • ssh.close og ssh.list til forbindelsens livscyklus.

Agenten godkender sig med en Group SSH key: én nøgle pr. Workspace, delt af dets agenter. ssh.public_key returnerer den, og du tilføjer den til ~/.ssh/authorized_keys på maskinen, som du ville gøre for enhver anden SSH-klient.

Harnessen kan nå din maskine på tre måder.

1. En offentlig adresse

Har maskinen allerede en SSH-server, der kan nås, forbinder agenten til dens IP-adresse eller DNS-navn:

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

2. Tailcat, til en maskine uden offentlig adresse

En bærbar eller en hjemmeserver bag NAT har ofte ingen adresse, som harnessen kan ringe op. Tailcat forbinder den uden en indgående port, en VPN eller en konto. Det kører på maskinen, laver kun udgående forbindelser og udskriver en adresse, der begynder med tc.

Tailcat kan også selv være SSH-serveren. Kør det med den offentlige Group-nøgle:

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

Det giver en login-shell, kørsel af kommandoer og SFTP som den konto, der kører Tailcat. Det kræver ingen sshd og ændrer ikke din SSH-konfiguration. Kører maskinen allerede OpenSSH, så brug tailcat serve 22 i stedet, og OpenSSH står for login. Send derefter adressen til agenten:

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

3. Dit eget Tailscale-netværk

Er dine maskiner allerede i et tailnet, kan dit Workspace tilslutte sig det. Forbind det i indstillingerne i Comma-appen, eller bed agenten gøre det. En tailnet-administrator åbner et login-link og godkender noden. Noden bruger som standard tagget tag:comma-agent, så din tailnet-politik bestemmer præcis, hvilke enheder og porte den kan nå, for eksempel kun port 22 på hjemmeserveren.

Agenten viser enheder med tailnet.peers og forbinder via MagicDNS-navn eller Tailscale-adresse:

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

Tillid og levetid

På alle veje gemmer den første forbindelse til en vært dens værtsnøgle. En senere forbindelse, der viser en anden nøgle, afvises med host_key_mismatch og begge fingeraftryk, og agenten spørger dig, før den fjerner den gamle nøgle med ssh.known_hosts.remove.

En SSH-forbindelse hører til én agentsession. Den lukker efter 30 minutter uden brug og overlever ikke en genstart af agenten eller et deploy af platformen, så langvarigt arbejde hører hjemme i tmux eller screen på den eksterne maskine. Kommandoer har grænser: ssh.exec får timeout efter 60 sekunder som standard og højst 600, og en timeout bliver rapporteret, aldrig automatisk gentaget.

Til backuppen kunne du spørge: »Læs logfilerne og tjek diskpladsen, men slet ingen filer, og ændr ikke konfigurationen. Fortæl mig først, hvad du finder.«

Try Comma, Now.

Kom i gang