Un listener SOCKS locale da una connessione AsyncSSH
Crea un inoltro TCP dinamico con l'API forward_socks di AsyncSSH e mantieni il listener attivo sul ciclo di eventi di asyncio.
AsyncSSH offre l'inoltro TCP dinamico tramite forward_socks(). Un'applicazione che dispone già di AsyncSSH può creare un listener SOCKS locale su una connessione SSH:
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())
Il server SSH e l'account sono esempi. Si applica il consueto controllo delle chiavi host di AsyncSSH. Il server deve consentire l'inoltro TCP richiesto. Per l'equivalente da riga di comando, l'inoltro dinamico locale di OpenSSH usa la stessa direzione dall'SSH alla destinazione.
I client locali possono ora usare 127.0.0.1:1080 come endpoint SOCKS. Ogni richiesta SOCKS fornisce la propria destinazione; il server SSH apre la connessione TCP in uscita corrispondente. L'applicazione non deve eseguire un downloader remoto per ogni URL.
L'attesa mantiene la funzione asincrona nell'ambito della connessione. Un ritorno immediato dopo aver creato il listener uscirebbe da quell'ambito e chiuderebbe la connessione che lo sostiene. Un'applicazione asyncio più grande può tenere aperta questa connessione mentre esegue gli altri suoi compiti sullo stesso ciclo di eventi.