Локальный слушатель SOCKS из соединения AsyncSSH
Создайте динамическую переадресацию TCP с помощью API forward_socks в AsyncSSH и удерживайте слушатель в цикле событий asyncio.
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 может держать это соединение открытым, выполняя другие задачи в том же цикле событий.