AsyncSSH ofereix reenviament TCP dinàmic mitjançant forward_socks(). Una aplicació que ja disposa d'AsyncSSH pot crear un receptor SOCKS local sobre una connexió 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 i el compte són exemples. S'aplica la comprovació habitual de claus d'amfitrió d'AsyncSSH. El servidor ha de permetre el reenviament TCP sol·licitat. Per a l'equivalent a la línia d'ordres, el reenviament dinàmic local d'OpenSSH fa servir la mateixa direcció d'SSH cap al destí.

Els clients locals ja poden utilitzar 127.0.0.1:1080 com a punt final SOCKS. Cada sol·licitud SOCKS indica el seu destí; el servidor SSH obre la connexió TCP sortint corresponent. L'aplicació no ha d'executar un descarregador remot per a cada URL.

L'espera manté la funció asíncrona dins de l'abast de la connexió. Tornar immediatament després de crear el receptor sortiria d'aquest abast i tancaria la connexió que el sosté. Una aplicació asyncio més gran pot mantenir aquesta connexió oberta mentre executa les altres tasques al mateix bucle d'esdeveniments.

Articles relacionats