Proxy üzerinden SSH erişimi
Bir LLM ajanının uzak makinelerde ham SSH anahtarları yerine bir SSH-proxy API'si üzerinden güvenle komut çalıştırması.
Proxy üzerinden SSH erişimi
Ajanların uzak makinelerde komut çalıştırması gerekir — bir konteyner dağıtmak, bir log okumak, bir config düzeltmek. Ham SSH özel anahtarlarını bir LLM'e vermek kötü bir fikirdir: anahtarlar bağlam pencerelerine, loglara ve kayıtlara düşer. Bir SSH-proxy bunu çözer: kimlik bilgilerini o tutar, ajan yalnızca HTTP konuşur.
Model
LLM ──HTTPS──► SSH-proxy ──SSH──► hedef makineler
(anahtarları tutar,
denetim günlüğü,
hız limitleri)Proxy, basit bir REST yüzeyi ile kalıcı oturumlar sunar:
| Uç | Amaç |
|---|---|
POST /connect?target=vps1 |
bir oturum aç → session_id |
POST /<sid>/exec {command, timeout} |
komut çalıştır (async) → exec_id |
GET /<sid>/exec/<exec_id> |
çıktıyı sorgula |
| SFTP uçları | dosya yükleme/indirme, ls, mkdir, rm |
Kimlik doğrulama bir Bearer token'dır — kullandığın diğer her API ile aynı desen.
Yürütme deseni
# 1. bir kez bağlan, oturumu tüm görev boyunca yeniden kullan
SID=$(curl -s -H "Authorization: Bearer $KEY" \
"https://ssh-proxy.example/connect?target=vps1" | jq -r .session_id)
# 2. bir komut çalıştır
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. sonucu sorgula
curl -s -H "Authorization: Bearer $KEY" "https://ssh-proxy.example/$SID/exec/$EID"Kurallar
- Oturumları yeniden kullan. Her komut için bağlanmak kaynak harcar ve hız limitlerini tetikler.
session_id'yi sakla (örn./tmp/vps1_sid) ve yeniden kullanmadan önce heartbeat ile kontrol et. - Hedefleri adlandır, keşfetme. Hedefler önceden kayıtlıdır (
vps1,pi, …). Proxy tek doğruluk kaynağıdır — ajan koduna asla IP adresi gömme. - Dosyalar için shell cat/heredoc yerine SFTP'yi tercih et.
execüzerinden ikili veri escape etmek yükleri bozar. Özel yükleme/indirme uçlarını kullan. - Komutlarını tırnakla. JSON gövdesi iki kez parse edilir (HTTP + shell). Uzak komutları tek tırnak içine al ve tek satırda tut.
- Denetim olduğunu varsay. Her exec proxy'nin denetim günlüğüne düşer — insan her şeyi okuyormuş gibi davran (okuyabilir).
exec NE ZAMAN kullanılmaz
- Bir API'si olan yapılandırılmış durumu okumak (Docker, veritabanları, Synapse Mind API) — CLI çıktısı ayrıştırmak yerine her zaman API'yi tercih et.
- Uzun süren etkileşimli süreçler.
exec, zaman aşımlı fire-and-forget'tır; bunun yerine hedeftenohup+ bir durum dosyası kullan. - Açık talimat olmadan yıkıcı herhangi bir şey. Proxy sana gücü verir — insan sana izni verir.
Hata kurtarma
| Belirti | Çözüm |
|---|---|
| connect'te 401 | token süresi doldu — memory/settings'ten yeniden oku, asla bir kayıttan değil |
| oturum 404 | oturum süresi doldu (24h sınırı) — yeniden bağlan |
| exec zaman aşımı | timeout değerini yükselt ya da komutu böl; hedefin yükünü kontrol et |
| bozuk dosya içeriği | SFTP yerine exec kullandın — SFTP uçlarına geç |