Akses SSH melalui proxy
Bagaimana agen LLM menjalankan perintah di mesin jarak jauh dengan aman melalui API proxy SSH alih-alih kunci SSH mentah.
Akses SSH melalui proxy
Agen perlu menjalankan perintah di mesin jarak jauh — deploy kontainer, membaca log, memperbaiki config. Menyerahkan kunci privat SSH mentah kepada LLM adalah ide buruk: kunci berakhir di jendela konteks, log, dan transkrip. Proxy SSH menyelesaikannya: kredensial dipegangnya, agen hanya berbicara HTTP.
Modelnya
LLM ──HTTPS──► Proxy SSH ──SSH──► mesin target
(memegang kunci,
log audit,
batas laju)Proxy memaparkan sesi persisten dengan permukaan REST sederhana:
| Endpoint | Tujuan |
|---|---|
POST /connect?target=vps1 |
membuka sesi → session_id |
POST /<sid>/exec {command, timeout} |
menjalankan perintah (async) → exec_id |
GET /<sid>/exec/<exec_id> |
polling keluaran |
| Endpoint SFTP | unggah/unduh berkas, ls, mkdir, rm |
Autentikasi berupa token Bearer — pola yang sama seperti semua API lain yang kamu pakai.
Pola eksekusi
# 1. sambungkan sekali, pakai ulang sesi untuk seluruh tugas
SID=$(curl -s -H "Authorization: Bearer $KEY" \
"https://ssh-proxy.example/connect?target=vps1" | jq -r .session_id)
# 2. jalankan perintah
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. polling hasilnya
curl -s -H "Authorization: Bearer $KEY" "https://ssh-proxy.example/$SID/exec/$EID"Aturan main
- Pakai ulang sesi. Menyambung per perintah memboroskan sumber daya dan memicu batas laju. Simpan
session_id(mis./tmp/vps1_sid) dan kirimkan heartbeat sebelum pakai ulang. - Namai target, jangan menemukannya. Target terdaftar lebih dulu (
vps1,pi, …). Proxy adalah satu-satunya sumber kebenaran — jangan pernah hardcode alamat IP di kode agen. - Utamakan SFTP daripada cat/heredoc shell untuk berkas. Meloloskan data biner lewat
execmerusak payload. Gunakan endpoint unggah/unduh khusus. - Kutip perintahmu. Badan JSON diurai dua kali (HTTP + shell). Bungkus perintah jarak jauh dalam tanda kutip tunggal dan jaga satu baris.
- Asumsikan audit. Setiap exec masuk log audit proxy — bersikaplah seolah manusia membaca segalanya (ia bisa).
Kapan exec TIDAK dipakai
- Membaca keadaan terstruktur yang punya API (Docker, basis data, Mind API Synapse) — selalu utamakan API daripada mengurai keluaran CLI.
- Proses interaktif berdurasi panjang.
execfire-and-forget dengan batas waktu; pakainohup+ berkas status di target sebagai gantinya. - Apa pun yang merusak tanpa instruksi eksplisit. Proxy memberimu kekuatan — manusia memberimu izin.
Pemulihan kesalahan
| Gejala | Solusi |
|---|---|
| 401 saat connect | token kedaluwarsa — baca ulang dari memory/settings, tidak pernah dari transkrip |
| sesi 404 | sesi kedaluwarsa (batas 24 jam) — sambung ulang |
| exec timeout | naikkan timeout atau pecah perintahnya; cek beban target |
| isi berkas rusak | kamu memakai exec alih-alih SFTP — pindah ke endpoint SFTP |