AsyncSSH 연결에서 만든 로컬 SOCKS 리스너
AsyncSSH의 forward_socks API로 동적 TCP 포워딩을 만들고 asyncio 이벤트 루프에서 리스너를 유지하세요.
AsyncSSH는 forward_socks()을 통해 동적 TCP 포워딩을 제공합니다. AsyncSSH를 이미 갖춘 애플리케이션이라면 SSH 연결 위에 로컬 SOCKS 리스너를 만들 수 있습니다.
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 애플리케이션은 같은 이벤트 루프에서 다른 작업을 돌리면서 이 연결을 열어 둘 수 있습니다.