Skip to main content

การเข้าถึง 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"

กฎการปฏิบัติ

  1. ใช้เซสชันซ้ำ การเชื่อมต่อต่อคำสั่งเปลืองทรัพยากรและกระตุ้นขีดจำกัดอัตรา เก็บ session_id (เช่น /tmp/vps1_sid) และส่ง heartbeat ก่อนใช้ซ้ำ
  2. ตั้งชื่อเป้าหมาย อย่าไปค้นมัน เป้าหมายลงทะเบียนล่วงหน้า (vps1, pi, …) พร็อกซีคือแหล่งความจริงเดียว — ห้ามฮาร์ดโค้ดที่อยู่ IP ในโค้ดเอเจนต์
  3. เลือก SFTP มากกว่า cat/heredoc ของเชลล์สำหรับไฟล์ การหนีบีบข้อมูลไบนารีผ่าน execทำให้เพย์โหลดเสียหาย ใช้เอนด์พอยต์อัป/ดาวน์โหลดเฉพาะทาง
  4. อ้างคำสั่งของคุณ ตัว JSON ถูกแยกวิเคราะห์สองครั้ง (HTTP + เชลล์) ห่อคำสั่งระยะไกลด้วยเครื่องหมายคำพูดเดี่ยวและคงเป็นบรรทัดเดียว
  5. สมมติว่ามีการตรวจสอบ ทุก 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