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 може тримати це з'єднання відкритим, виконуючи інші завдання в тому самому циклі подій.

Схожі статті