Лакальны 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 можа трымаць гэтае злучэнне адкрытым, выконваючы іншыя задачы ў тым жа цыкле падзей.