Um ouvinte SOCKS local a partir de uma conexão AsyncSSH
Crie encaminhamento TCP dinâmico com a API forward_socks do AsyncSSH e mantenha o ouvinte vivo no loop de eventos do asyncio.
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.