AsyncSSH ofrece reenvío TCP dinámico mediante forward_socks(). Una aplicación que ya dispone de AsyncSSH puede crear un escucha SOCKS local sobre una conexión 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())

El servidor SSH y la cuenta son ejemplos. Se aplica la comprobación habitual de claves de host de AsyncSSH. El servidor debe permitir el reenvío TCP solicitado. Como equivalente en la línea de comandos, el reenvío dinámico local de OpenSSH usa la misma dirección de SSH al destino.

Los clientes locales ya pueden usar 127.0.0.1:1080 como su punto de conexión SOCKS. Cada solicitud SOCKS indica su destino; el servidor SSH abre la conexión TCP saliente correspondiente. La aplicación no necesita ejecutar un descargador remoto para cada URL.

La espera mantiene la función asíncrona dentro del ámbito de la conexión. Volver de inmediato tras crear el escucha saldría de ese ámbito y cerraría la conexión que lo sostiene. Una aplicación asyncio mayor puede mantener esta conexión abierta mientras ejecuta sus otras tareas en el mismo bucle de eventos.

Artículos relacionados