从 AsyncSSH 连接创建本地 SOCKS 监听器
用 AsyncSSH 的 forward_socks API 建立动态 TCP 转发,并让监听器在 asyncio 事件循环上保持存活。
AsyncSSH 通过 forward_socks() 提供动态 TCP 转发。已经引入 AsyncSSH 的应用可以在 SSH 连接上创建本地 SOCKS 监听器:
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 应用可以在同一事件循环上运行其他任务的同时保持这条连接打开。