Lokalny nasłuchiwacz SOCKS z połączenia AsyncSSH
Utwórz dynamiczne przekazywanie TCP za pomocą API forward_socks AsyncSSH i utrzymaj nasłuchiwacz przy życiu w pętli zdarzeń asyncio.
AsyncSSH udostępnia dynamiczne przekazywanie TCP przez forward_socks(). Aplikacja, która ma już AsyncSSH, może utworzyć lokalny nasłuchiwacz SOCKS na połączeniu 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())
Serwer SSH i konto to tylko przykłady. Obowiązuje zwykła weryfikacja kluczy hosta w AsyncSSH. Serwer musi zezwalać na żądane przekazywanie TCP. Odpowiednikiem w wierszu poleceń jest lokalne dynamiczne przekazywanie OpenSSH, które używa tego samego kierunku od SSH do celu.
Klienci lokalni mogą teraz używać 127.0.0.1:1080 jako punktu końcowego SOCKS. Każde żądanie SOCKS podaje swój cel; serwer SSH otwiera odpowiednie połączenie TCP wychodzące. Aplikacja nie musi uruchamiać zdalnego pobierającego dla każdego adresu URL.
Oczekiwanie utrzymuje funkcję asynchroniczną w zasięgu połączenia. Natychmiastowy powrót po utworzeniu nasłuchiwacza opuściłby ten zasięg i zamknął połączenie, które go podtrzymuje. Większa aplikacja asyncio może trzymać to połączenie otwarte, wykonując inne zadania w tej samej pętli zdarzeń.