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 应用可以在同一事件循环上运行其他任务的同时保持这条连接打开。

相关文章