AsyncSSH erbjuder dynamisk TCP-vidarebefordran via forward_socks(). Ett program som redan har AsyncSSH kan skapa en lokal SOCKS-lyssnare över en SSH-anslutning:

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())

SSH-servern och kontot är exempel. Den vanliga värdnyckelkontrollen i AsyncSSH gäller. Servern måste tillåta den begärda TCP-vidarebefordran. Som kommandoradesekvivalent använder OpenSSH:s lokala dynamiska vidarebefordran samma riktning från SSH till målet.

Lokala klienter kan nu använda 127.0.0.1:1080 som sin SOCKS-slutpunkt. Varje SOCKS-begäran anger sitt mål; SSH-servern öppnar motsvarande utgående TCP-anslutning. Programmet behöver inte köra en fjärrnedladdare för varje URL.

Väntan håller den asynkrona funktionen inom anslutningens omfång. Att återvända direkt efter att lyssnaren skapats skulle lämna det omfånget och stänga anslutningen som bär den. Ett större asyncio-program kan hålla den här anslutningen öppen medan det kör sina andra uppgifter på samma händelseloop.

Relaterade artiklar