AsyncSSH biedt dynamische TCP-doorsturing via forward_socks(). Een applicatie die AsyncSSH al heeft, kan een lokale SOCKS-listener over een SSH-verbinding maken:

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

De SSH-server en het account zijn voorbeelden. De gebruikelijke AsyncSSH-controle van hostsleutels geldt. De server moet de gevraagde TCP-doorsturing toestaan. Als equivalent op de opdrachtregel gebruikt de lokale dynamische doorsturing van OpenSSH dezelfde richting van SSH naar de bestemming.

Lokale clients kunnen 127.0.0.1:1080 nu als hun SOCKS-eindpunt gebruiken. Elke SOCKS-aanvraag geeft zijn bestemming door; de SSH-server opent de bijbehorende uitgaande TCP-verbinding. De applicatie hoeft niet voor elke URL een externe downloader uit te voeren.

Het wachten houdt de asynchrone functie binnen het bereik van de verbinding. Direct terugkeren na het maken van de listener zou dat bereik verlaten en de verbinding sluiten die hem draagt. Een grotere asyncio-applicatie kan deze verbinding openhouden terwijl ze haar andere taken op dezelfde eventloop uitvoert.

Gerelateerde artikelen