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
- Å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. - Namnge targets, upptäck dem inte. Targets är förregistrerade (
vps1,pi, …). Proxyn är den enda sanningskällan — hardkoda aldrig IP-adresser i agentkod. - Föredra SFTP framför shell cat/heredoc för filer. Att escap:a binär data via
execkorrumperar payloads. Använd de dedikerade uppladdnings-/nedladdningendpointsen. - Citera dina kommandon. JSON-kroppen parsas två gånger (HTTP + shell). Wrappa fjärrkommandon i enkla citattecken och håll dem enradiga.
- 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ändnohup+ 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 |