AsyncSSH предоставя динамично TCP препращане чрез forward_socks(). Приложение, което вече разполага с AsyncSSH, може да създаде локален SOCKS слушател през 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())

SSH сървърът и акаунтът са примери. Прилага се обичайната проверка на ключове на хоста в AsyncSSH. Сървърът трябва да разреши поисканото TCP препращане. За еквивалент от командния ред локалното динамично препращане на OpenSSH използва същата посока от SSH към дестинацията.

Локалните клиенти вече могат да използват 127.0.0.1:1080 като своя SOCKS крайна точка. Всяка SOCKS заявка посочва своята дестинация; SSH сървърът отваря съответната изходяща TCP връзка. Приложението не трябва да стартира отдалечен изтеглящ инструмент за всеки URL.

Изчакването задържа асинхронната функция в обхвата на връзката. Ако се върне веднага след създаването на слушателя, тя би излязла от този обхват и би затворила връзката, която го поддържа. По-голямо asyncio приложение може да държи тази връзка отворена, докато изпълнява другите си задачи в същия цикъл от събития.

Подобни статии