# 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 //exec` `{command, timeout}` | köra ett kommando (async) → `exec_id` | | `GET //exec/` | 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 ```bash # 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 |