Skip to main content

SSH-åtkomst via proxy

Hur en LLM-agent kör kommandon på fjärrmaskiner säkert via ett SSH-proxy-API i stället för råa SSH-nycklar.


SSH-åtkomst via proxy

Agenter behöver köra kommandon på fjärrmaskiner — deploya en container, läsa en logg, fixa en config. Att ge råa SSH-privatnycklar till en LLM är en dålig idé: nycklar hamnar i kontextfönster, loggar och transkriptioner. En SSH-proxy löser detta: den äger credentials, agenten talar bara HTTP.

Modellen

LLM ──HTTPS──► SSH-proxy ──SSH──► målmaskiner
                (äger nycklarna,
                 auditlogg,
                 rategränser)

Proxyn exponerar beständiga sessioner med ett enkelt REST-yta:

Endpoint Syfte
POST /connect?target=vps1 öppna en session → session_id
POST /<sid>/exec {command, timeout} köra ett kommando (async) → exec_id
GET /<sid>/exec/<exec_id> hämta utdata
SFTP-endpoints filuppladdning/nedladdning, ls, mkdir, rm

Autentisering är en Bearer-token — samma mönster som alla andra API:er du använder.

Exekveringsmönstret

# 1. anslut en gång, återanvänd sessionen för hela tasken
SID=$(curl -s -H "Authorization: Bearer $KEY" \
  "https://ssh-proxy.example/connect?target=vps1" | jq -r .session_id)

# 2. kör ett kommando
EID=$(curl -s -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -X POST "https://ssh-proxy.example/$SID/exec" \
  -d '{"command": "docker ps --format \"{{.Names}}\"", "timeout": 120}' | jq -r .exec_id)

# 3. hämta resultatet
curl -s -H "Authorization: Bearer $KEY" "https://ssh-proxy.example/$SID/exec/$EID"

Uppföranderegler

  1. Återanvänd sessioner. Att ansluta per kommando slösar resurser och utlöser rategränser. Spara session_id (t.ex. /tmp/vps1_sid) och heartbeat:a den före återanvändning.
  2. Namnge targets, upptäck dem inte. Targets är förregistrerade (vps1, pi, …). Proxyn är den enda sanningskällan — hardkoda aldrig IP-adresser i agentkod.
  3. Föredra SFTP framför shell cat/heredoc för filer. Att escap:a binär data via exec korrumperar payloads. Använd de dedikerade uppladdnings-/nedladdningendpointsen.
  4. Citera dina kommandon. JSON-kroppen parsas två gånger (HTTP + shell). Wrappa fjärrkommandon i enkla citattecken och håll dem enradiga.
  5. Anta auditing. Varje exec hamnar i proxyns auditlogg — bete dig som om människan läser allt (hon kan).

När exec INTE ska användas

  • Läsa strukturerad tillstånd som har ett API (Docker, databaser, Synapse Mind API) — föredra alltid API framför CLI-output-parsning.
  • Långvariga interaktiva processer. exec är fire-and-forget med timeout; använd nohup + en statusfil på targeten.
  • Allt destruktivt utan uttrycklig instruktion. Proxyn ger dig makten — människan ger dig tillåtelsen.

Felåterställning

Symptom Åtgärd
401 vid connect token utgången — läs den igen från memory/settings, aldrig från en transkription
session 404 sessionen utgick (24h-gräns) — anslut igen
exec-timeout höj timeout eller dela kommandot; kontrollera lasten på targeten
korrumperat filinnehåll du använde exec i stället för SFTP — byt till SFTP-endpointsen