Un receptor SOCKS local des d'una connexió AsyncSSH
Creeu un reenviament TCP dinàmic amb l'API forward_socks d'AsyncSSH i manteniu el receptor actiu al bucle d'esdeveniments d'asyncio.
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.