En lokal SOCKS-lytter fra en AsyncSSH-tilkobling
Lag dynamisk TCP-videresending med forward_socks-API-et til AsyncSSH, og hold lytteren i live på asyncio-hendelsesløkken.
AsyncSSH tilbyr dynamisk TCP-videresending gjennom forward_socks(). En applikasjon som allerede bruker AsyncSSH, kan lage en lokal SOCKS-lytter over en SSH-tilkobling:
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 vanlige AsyncSSH-kontrollen av vertsnøkler gjelder. Serveren må tillate den forespurte TCP-videresendingen. Som kommandolinjeekvivalent bruker OpenSSHs lokale dynamiske videresending samme retning fra SSH til målet.
Lokale klienter kan nå bruke 127.0.0.1:1080 som SOCKS-endepunktet sitt. Hver SOCKS-forespørsel oppgir målet sitt; SSH-serveren åpner den tilsvarende utgående TCP-tilkoblingen. Applikasjonen trenger ikke kjøre en ekstern nedlaster for hver URL.
Ventingen holder den asynkrone funksjonen innenfor tilkoblingens omfang. Å returnere umiddelbart etter at lytteren er opprettet, ville forlate dette omfanget og lukke tilkoblingen som bærer den. En større asyncio-applikasjon kan holde denne tilkoblingen åpen mens den kjører de andre oppgavene sine på samme hendelsesløkke.