AsyncSSH bietet dynamische TCP-Weiterleitung über forward_socks(). Eine Anwendung, die AsyncSSH bereits nutzt, kann einen lokalen SOCKS-Listener über eine SSH-Verbindung einrichten:

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-Server und Konto sind Beispiele. Die übliche AsyncSSH-Prüfung der Hostschlüssel gilt. Der Server muss die angeforderte TCP-Weiterleitung erlauben. Als Entsprechung auf der Kommandozeile nutzt OpenSSHs lokale dynamische Weiterleitung dieselbe Richtung von SSH zum Ziel.

Lokale Clients können 127.0.0.1:1080 nun als ihren SOCKS-Endpunkt verwenden. Jede SOCKS-Anfrage gibt ihr Ziel an; der SSH-Server öffnet die entsprechende ausgehende TCP-Verbindung. Die Anwendung muss nicht für jede URL einen entfernten Downloader ausführen.

Das Warten hält die asynchrone Funktion im Gültigkeitsbereich der Verbindung. Eine sofortige Rückkehr nach dem Erstellen des Listeners würde diesen Bereich verlassen und die Verbindung schließen, die ihn trägt. Eine größere asyncio-Anwendung kann diese Verbindung offen halten, während sie ihre anderen Aufgaben auf derselben Ereignisschleife ausführt.

Ähnliche Artikel