การถ่ายโอนไฟล์และการเชื่อมต่อ LAN โดยตรง
Agent, Exchange, CLI, เว็บคอนโซล และคอนโซลมือถือรองรับการถ่ายโอนไฟล์ อุปกรณ์ที่รองรับโฆษณาความสามารถของ files
การถ่ายโอนไฟล์
remote-cli file i5m ls /tmp
remote-cli file i5m upload ./example.zip /tmp/example.zip
remote-cli file i5m download /tmp/example.zip ./downloaded.zip
remote-cli file i5m fetch https://example.com/example.zip ./example.zip
ไฟล์ที่มีอยู่จะไม่ถูกเขียนทับตามค่าเริ่มต้น เพิ่ม --overwrite เมื่ออัปโหลดหรือดาวน์โหลดเพื่อให้สามารถเปลี่ยนได้ ยกเลิกด้วย Ctrl+C ใน CLI หรือปุ่มยกเลิกในเว็บ/คอนโซลมือถือ ใช้แท็บรายละเอียดอุปกรณ์ Files บนเว็บ หรือ การถ่ายโอนไฟล์ จากรายละเอียดอุปกรณ์บนมือถือ
การถ่ายโอนใช้ชิ้น 64 KiB รอการตอบรับหลังจากแต่ละชิ้น ไฟล์เดียวถูกจำกัดไว้ที่ 1 GiB; การดาวน์โหลดเบราว์เซอร์จำกัดอยู่ที่ 128 MiB ดังนั้นให้ใช้ CLI หรือคอนโซลมือถือสำหรับไฟล์ขนาดใหญ่ รายชื่อไดเร็กทอรีส่งคืนได้สูงสุด 1,000 รายการ ไม่รองรับการอัปโหลดไดเรกทอรีแบบเรียกซ้ำ การอัปโหลดจะเขียนไฟล์ชั่วคราวในไดเร็กทอรีปลายทางและแทนที่ปลายทางแบบอะตอมมิกหลังจากได้รับไฟล์เต็ม การยกเลิก การตัดการเชื่อมต่อ และการหมดเวลาจะล้างไฟล์ชั่วคราวที่ไม่สมบูรณ์ การดาวน์โหลด CLI ยังใช้ไฟล์ชั่วคราวด้วย การดาวน์โหลดบนมือถือไปที่แคช จากนั้นเรียกใช้การแชร์/การบันทึกระบบ
การเข้าถึงไฟล์ใช้สิทธิ์ระบบปฏิบัติการของกระบวนการ Agent และไม่จำกัดเฉพาะไดเร็กทอรีที่แชร์ บัญชีแบบอ่านอย่างเดียวไม่สามารถแสดงรายการไดเร็กทอรี อัพโหลด หรือดาวน์โหลดได้ Exchange จะคงการตรวจสอบความเป็นเจ้าของพื้นที่ทำงาน การแยกเซสชัน และการตรวจสอบการดำเนินการโดยไม่ต้องบันทึกเนื้อหาไฟล์ บน Android นั้น . จะชี้ไปที่ไดเร็กทอรีไฟล์ของแอป Agent ไดเร็กทอรีอื่น ๆ ยังคงอยู่ภายใต้การอนุญาต Android และแซนด์บ็อกซ์ของระบบ
ดาวน์โหลดทางอินเตอร์เน็ตผ่าน Agent
ป้อน HTTP/HTTPS URL ในแท็บไฟล์ของเว็บ หรือเรียกใช้ file DEVICE fetch URL LOCAL Agent ดาวน์โหลดจากเครือข่ายของตัวเองและสตรีมไฟล์ไปยังคอมพิวเตอร์ Console โดยไม่บันทึกลงใน Agent การดาวน์โหลดทางเว็บจำกัดไว้ที่ 128 MiB; CLI ดาวน์โหลดเป็น 1 GiB การยกเลิก การยกเลิกการเชื่อมต่อ และความล้มเหลวจะละทิ้งไฟล์ที่ไม่สมบูรณ์ ปลายทาง CLI ที่มีอยู่ต้องใช้ --overwrite Native Agent (เดสก์ท็อป, Linux, Android และ OpenWrt) รองรับสิ่งนี้ ส่วนขยายเบราว์เซอร์ไม่มีการถ่ายโอนไฟล์ การตรวจสอบใบรับรองยังคงเปิดใช้งานอยู่ URL ที่มีข้อมูลประจำตัวฝังอยู่และดาวน์เกรด HTTPS จะถูกปฏิเสธ โดยมีการเปลี่ยนเส้นทางสูงสุดห้าครั้ง
การดาวน์โหลดไม่สืบทอดเซิร์ฟเวอร์การจัดการ --insecure
คำขอ HTTP แบบ Curl
วางคำสั่ง curl ในแท็บคำขอ HTTP ของอุปกรณ์ Console ส่งคำขอที่ปิดผนึกไปยัง Agent ที่เลือก และแสดงสถานะ เวลาที่ผ่านไป ส่วนหัวและเนื้อหา แยกวิเคราะห์ -X/--request, -H/--header, -d/--data, --data-raw, อินไลน์ --data-binary, --json, -I/--head, -L/--location, -m/--max-time และ --url เป็นข้อมูล มันไม่เคยดำเนินการนิพจน์เชลล์หรืออ่าน @file Native Agent ใช้เครื่องมือ HTTP ที่ใช้ร่วมกันโดยไม่ต้องมีขด ส่วนขยายเบราว์เซอร์ต้องการสิทธิ์การเข้าถึงไซต์ ละเว้นคุกกี้ของเบราว์เซอร์ ปฏิเสธส่วนหัวที่ต้องห้าม และรายงานการเปลี่ยนเส้นทางที่ซ่อนโดย Chromium ใช้ URL สุดท้าย สิทธิ์แบบอ่านอย่างเดียวไม่สามารถส่งคำขอได้ เนื้อความของคำขอถูกจำกัดไว้ที่ 256 KiB และหมดเวลาอยู่ที่ 120 วินาที การตอบกลับถูกตัดทอนที่ 1 MiB สำหรับตัวแทนดั้งเดิมหรือ 128 KiB ในส่วนขยาย ใช้การดึงไฟล์สำหรับการดาวน์โหลดแบบไบนารีหรือขนาดใหญ่กว่า
ข้อความที่ปิดผนึกคือ net_req ความสามารถของเบราว์เซอร์: net เทียบเท่า CLI: remote-cli net DEVICE http URL -X POST -H 'Content-Type: application/json' -d '{"message":"hello"}'
curl -X POST 'https://example.com/api' -H 'Content-Type: application/json' --data-raw '{"message":"hello"}'
พอร์ตควบคุมแลน
การควบคุม LAN ถูกปิดใช้งานตามค่าเริ่มต้น โดยมีพอร์ต TCP เริ่มต้น 7277 เปิดใช้งานบน LAN ที่เชื่อถือได้เท่านั้น ก่อนเปิดใช้งาน อุปกรณ์จะต้องปักหมุดรูทพื้นที่ทำงาน (remote-agent seal root หรือเชื่อมต่อกับ Exchange ก่อนเพื่อทำให้ TOFU สมบูรณ์) ไม่มีโทเค็นการเข้าถึง LAN อย่าส่งต่อพอร์ตไปยังอินเทอร์เน็ตสาธารณะ
เพิ่มฟิลด์เหล่านี้ในการกำหนดค่า Agent JSON ที่มีอยู่:
{
"lan_enabled": true,
"lan_port": 7277
}
เก็บฟิลด์ server, device_id และ token ที่มีอยู่ หรือใช้ --lan-enabled, --lan-port หรือ REMOTE_LAN_ENABLED, REMOTE_LAN_PORT การเปิดใช้งาน LAN โดยไม่มีรูทพื้นที่ทำงานที่ปักหมุดจะทำให้การเริ่มต้นระบบล้มเหลว
ทั้งการกำหนดค่าเดสก์ท็อปและการตั้งค่า LuCI มีสวิตช์ รีสตาร์ท Agent หลังจากเปลี่ยน; การกำหนดค่าเดสก์ท็อปจำเป็นต้องหยุดการเชื่อมต่อก่อนทำการแก้ไข การปิดสวิตช์และการรีสตาร์ทจะหยุดการฟังบนพอร์ตนี้ โปรแกรมจะไม่เพิ่มกฎไฟร์วอลล์โดยอัตโนมัติ
สำหรับการเชื่อมต่อโดยตรงของ CLI ให้เขียนการกำหนดค่าแยกต่างหากแทนที่จะใช้ login (ซึ่งต้องใช้โทเค็นที่ไม่ว่างเปล่า) ตั้งค่า server เป็น http://IP:7277 ของอุปกรณ์ และปล่อย token ว่างไว้ คำร้องขอไม่มีส่วนหัว Authorization:
server = "http://192.168.1.20:7277"
token = ""
ชี้ REMOTE_CLI_CONFIG ไปที่ไฟล์นี้เพื่อคงการเข้าสู่ระบบคลาวด์แยกต่างหาก ข้อมูลระบุตัวตนที่ปิดผนึกและแคชการให้สิทธิ์จะอยู่ข้างๆ การกำหนดค่านี้: การให้สิทธิ์แบบออฟไลน์ใน seal-grants.json และห่วงโซ่ใบรับรองระดับรูทแรกใน seal-chains.json การทำงานของอุปกรณ์ทั้งหมดเปิดเฉพาะเซสชันที่ปิดผนึก รวมถึงการเชื่อมต่อโดยตรงที่มีการ์ดอุปกรณ์มี local หรือจุดสิ้นสุด LAN /api/auth/me ส่งคืน 401 Agent จะไม่ออกหรือต่ออายุสิทธิ์เหล่านี้ ในขณะที่คลาวด์ออฟไลน์ เฉพาะการให้สิทธิ์รูทเชนที่ยังคงใช้ได้ในแคชเท่านั้นที่สามารถใช้งานได้ sessions และ session-kill ไม่พร้อมใช้งาน: LAN ไม่มีไดเร็กทอรีเซสชัน และ Exchange ยังคงจัดการเซสชันอุปกรณ์ต่อไป
การเชื่อมต่อโดยตรงเปิดเผยเฉพาะอุปกรณ์ภายในเครื่องเท่านั้น เลเยอร์ชั้นนอกยอมรับเฉพาะที่อยู่ส่วนตัว ที่อยู่ลิงก์โลคอล หรือลูปแบ็ค และตรวจสอบความถูกต้องของ Origin หลังจากการตรวจสอบเหล่านี้ GET /api/devices จะส่งคืนเฉพาะ ID อุปกรณ์และ seal_key / seal_mode ที่จำเป็นในการเริ่มการจับมือแบบปิดผนึก GET /api/auth/me จะไม่ส่งคืนข้อมูลประจำตัวของผู้ปฏิบัติงานก่อนการจับมือแบบปิดผนึก GET /ws/operator ยอมรับเฉพาะเซสชันที่ปิดผนึกเท่านั้น และไม่มีพาธที่เข้ากันได้กับข้อความธรรมดา
ไคลเอนต์มีการพิสูจน์คีย์สาธารณะของตัวดำเนินการ การอนุญาตออฟไลน์ที่แคชไว้ (hello.grant) และห่วงโซ่ใบรับรองรูทแรก (hello.chain) ที่เป็นตัวเลือกแบบอินไลน์ใน open_sealed hello อุปกรณ์ใช้กฎเดียวกันกับพาธ Exchange เพื่อตรวจสอบรากในเครื่อง ขอบเขตอุปกรณ์ และการอนุญาตในการดู/จัดการ โดยปิดผนึกเนื้อหาเซสชันไว้ เว็บคอนโซลยังคงเชื่อมต่อผ่าน Exchange ตามค่าเริ่มต้น Listener จะผูกอินเทอร์เฟซ IPv4 ทั้งหมดและยังคงใช้งานได้ในขณะที่ระบบคลาวด์ออฟไลน์ ความล้มเหลวในการผูก LAN จะถูกบันทึกไว้ในขณะที่การเชื่อมต่อบนคลาวด์ยังคงดำเนินต่อไป
การตรวจสอบการถดถอย
python scripts/file-transfer-smoke.py --agent target/debug/remote-agent --cli target/debug/remote-cli
python scripts/agent-ui-smoke.py --agent target/debug/remote-agent --platform linux
ต้องใช้ Python 3.11+ และ websockets บน Windows ให้ใช้พาธ .exe และ --platform windows การทดสอบใช้การกำหนดค่าและไฟล์ชั่วคราวโดยไม่ต้องเปลี่ยนข้อมูลเข้าสู่ระบบหรืออุปกรณ์ที่มีอยู่