ตัวรับฟัง SOCKS ภายในเครื่องจาก AsyncSSH
สร้างการส่งต่อ TCP แบบไดนามิกด้วย API forward_socks ของ AsyncSSH และคงตัวรับฟังให้ทำงานอยู่บน asyncio event loop
AsyncSSH ให้การส่งต่อ TCP แบบไดนามิกผ่าน forward_socks() แอปพลิเคชันที่มี AsyncSSH อยู่แล้วสามารถสร้างตัวรับฟัง SOCKS ภายในเครื่องบนการเชื่อมต่อ SSH ได้:
import asyncio
import asyncssh
async def main():
async with asyncssh.connect(
'jump.example.net', username='operator'
) as connection:
listener = await connection.forward_socks('127.0.0.1', 1080)
await listener.wait_closed()
asyncio.run(main())
เซิร์ฟเวอร์ SSH และบัญชีเป็นเพียงตัวอย่าง การตรวจสอบคีย์โฮสต์ตามปกติของ AsyncSSH ยังมีผล เซิร์ฟเวอร์ต้องอนุญาตการส่งต่อ TCP ที่ร้องขอ สำหรับสิ่งที่เทียบเท่าบนบรรทัดคำสั่ง การส่งต่อแบบไดนามิกภายในเครื่องของ OpenSSH ใช้ทิศทางเดียวกันจาก SSH ไปยังปลายทาง
ไคลเอนต์ภายในเครื่องใช้ 127.0.0.1:1080 เป็นปลายทาง SOCKS ของตนได้แล้ว คำขอ SOCKS แต่ละครั้งระบุปลายทางของตน เซิร์ฟเวอร์ SSH จะเปิดการเชื่อมต่อ TCP ขาออกที่สอดคล้องกัน แอปพลิเคชันไม่ต้องเรียกตัวดาวน์โหลดระยะไกลสำหรับทุก URL
การรอทำให้ฟังก์ชันอะซิงโครนัสอยู่ในขอบเขตของการเชื่อมต่อ การกลับทันทีหลังจากสร้างตัวรับฟังจะออกจากขอบเขตนั้นและปิดการเชื่อมต่อที่ค้ำจุนมันไว้ แอปพลิเคชัน asyncio ที่ใหญ่ขึ้นสามารถเปิดการเชื่อมต่อนี้ไว้พร้อมกับทำงานอื่นบน event loop เดียวกัน