O AsyncSSH oferece encaminhamento TCP dinâmico por meio de forward_socks(). Uma aplicação que já tem AsyncSSH pode criar um ouvinte SOCKS local sobre uma conexão 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())

O servidor SSH e a conta são exemplos. Aplica-se a verificação habitual de chaves de host do AsyncSSH. O servidor precisa permitir o encaminhamento TCP solicitado. Como equivalente na linha de comando, o encaminhamento dinâmico local do OpenSSH usa a mesma direção do SSH para o destino.

Os clientes locais agora podem usar 127.0.0.1:1080 como seu endpoint SOCKS. Cada solicitação SOCKS informa seu destino; o servidor SSH abre a conexão TCP de saída correspondente. A aplicação não precisa executar um baixador remoto para cada URL.

A espera mantém a função assíncrona dentro do escopo da conexão. Retornar imediatamente após criar o ouvinte sairia desse escopo e fecharia a conexão que o sustenta. Uma aplicação asyncio maior pode manter essa conexão aberta enquanto executa suas outras tarefas no mesmo loop de eventos.

Artigos relacionados