การเข้าถึง SSH ผ่านพร็อกซี
เอเจนต์ LLM รันคำสั่งบนเครื่องระยะไกลอย่างปลอดภัยผ่าน API พร็อกซี SSH แทนคีย์ SSH ดิบอย่างไร
การเข้าถึง SSH ผ่านพร็อกซี
เอเจนต์ต้องรันคำสั่งบนเครื่องระยะไกล — ดีพลอยคอนเทนเนอร์ อ่านล็อก แก้คอนฟิก การส่งคีย์ส่วนตัว SSH ดิบให้ LLM เป็นความคิดที่ไม่ดี: คีย์ลงเอยในหน้าต่างบริบท ล็อก และบันทึกถอดความ พร็อกซี SSH แก้ปัญหานี้: มันเป็นผู้ถือข้อมูลประจำตัว เอเจนต์พูดแค่ HTTP
โมเดล
LLM ──HTTPS──► พร็อกซี SSH ──SSH──► เครื่องเป้าหมาย
(ถือคีย์,
บันทึกการตรวจสอบ,
ขีดจำกัดอัตรา)พร็อกซีเปิดเผยเซสชันถาวรด้วยพื้นผิว REST ที่เรียบง่าย:
| เอนด์พอยต์ | วัตถุประสงค์ |
|---|---|
POST /connect?target=vps1 |
เปิดเซสชัน → session_id |
POST /<sid>/exec {command, timeout} |
รันคำสั่ง (async) → exec_id |
GET /<sid>/exec/<exec_id> |
สำรวจเอาต์พุต |
| เอนด์พอยต์ SFTP | อัป/ดาวน์โหลดไฟล์, ls, mkdir, rm |
การยืนยันตัวตนเป็น Bearer token — รูปแบบเดียวกับทุก API อื่นที่คุณใช้
รูปแบบการดำเนินการ
# 1. เชื่อมต่อครั้งเดียว ใช้เซสชันซ้ำตลอดงาน
SID=$(curl -s -H "Authorization: Bearer $KEY" \
"https://ssh-proxy.example/connect?target=vps1" | jq -r .session_id)
# 2. รันคำสั่ง
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. สำรวจผลลัพธ์
curl -s -H "Authorization: Bearer $KEY" "https://ssh-proxy.example/$SID/exec/$EID"กฎการปฏิบัติ
- ใช้เซสชันซ้ำ การเชื่อมต่อต่อคำสั่งเปลืองทรัพยากรและกระตุ้นขีดจำกัดอัตรา เก็บ
session_id(เช่น/tmp/vps1_sid) และส่ง heartbeat ก่อนใช้ซ้ำ - ตั้งชื่อเป้าหมาย อย่าไปค้นมัน เป้าหมายลงทะเบียนล่วงหน้า (
vps1,pi, …) พร็อกซีคือแหล่งความจริงเดียว — ห้ามฮาร์ดโค้ดที่อยู่ IP ในโค้ดเอเจนต์ - เลือก SFTP มากกว่า cat/heredoc ของเชลล์สำหรับไฟล์ การหนีบีบข้อมูลไบนารีผ่าน
execทำให้เพย์โหลดเสียหาย ใช้เอนด์พอยต์อัป/ดาวน์โหลดเฉพาะทาง - อ้างคำสั่งของคุณ ตัว JSON ถูกแยกวิเคราะห์สองครั้ง (HTTP + เชลล์) ห่อคำสั่งระยะไกลด้วยเครื่องหมายคำพูดเดี่ยวและคงเป็นบรรทัดเดียว
- สมมติว่ามีการตรวจสอบ ทุก exec ลงในบันทึกการตรวจสอบของพร็อกซี — ปฏิบัติตัวเหมือนมนุษย์อ่านทุกอย่าง (เขาทำได้)
เมื่อไรไม่ควรใช้ exec
- อ่านสถานะที่มีโครงสร้างซึ่งมี API (Docker, ฐานข้อมูล, Mind API ของ Synapse) — เลือก API มากกว่าการแยกวิเคราะห์เอาต์พุต CLI เสมอ
- กระบวนการเชิงโต้ตอบที่ใช้เวลานาน
execเป็น fire-and-forget ที่มีหมดเวลา; ใช้nohup+ ไฟล์สถานะบนเป้าหมายแทน - สิ่งทำลายล้างอะไรก็ตามโดยไม่มีคำสั่งชัดเจน พร็อกซีให้พลังแก่คุณ — มนุษย์ให้การอนุญาตแก่คุณ
การกู้คืนจากข้อผิดพลาด
| อาการ | วิธีแก้ |
|---|---|
| 401 ตอน connect | โทเคนหมดอายุ — อ่านใหม่จาก memory/settings ไม่เคยจากบันทึกถอดความ |
| เซสชัน 404 | เซสชันหมดอายุ (จำกัด 24 ชม.) — เชื่อมต่อใหม่ |
| exec หมดเวลา | เพิ่ม timeout หรือแยกคำสั่ง; ตรวจโหลดของเป้าหมาย |
| เนื้อหาไฟล์เสียหาย | คุณใช้ exec แทน SFTP — เปลี่ยนไปใช้เอนด์พอยต์ SFTP |