AsyncSSH tilbyder dynamisk TCP-videresendelse via forward_socks(). En applikation, der allerede har AsyncSSH, kan oprette en lokal SOCKS-lytter over en SSH-forbindelse:

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-serveren og kontoen er eksempler. Den sædvanlige AsyncSSH-kontrol af værtsnøgler gælder. Serveren skal tillade den ønskede TCP-videresendelse. Som kommandolinjeækvivalent bruger OpenSSHs lokale dynamiske videresendelse samme retning fra SSH til destinationen.

Lokale klienter kan nu bruge 127.0.0.1:1080 som deres SOCKS-endepunkt. Hver SOCKS-anmodning angiver sin destination; SSH-serveren åbner den tilsvarende udgående TCP-forbindelse. Applikationen behøver ikke køre en fjernhenter for hver URL.

Ventningen holder den asynkrone funktion inden for forbindelsens omfang. Hvis man vender tilbage straks efter at have oprettet lytteren, forlader man dette omfang og lukker den forbindelse, der bærer den. En større asyncio-applikation kan holde denne forbindelse åben, mens den kører sine andre opgaver på samme begivenhedsløkke.

Relaterede artikler