2012-10-03 2 views
5

터널을 통해 일반 TCP 트래픽을 처리 할 수 ​​있도록 Conch를 사용하여 Twisted에서 포트 전달 옵션을 사용하여 원격 시스템에 SSH 세션을 시작하는 예가 있습니까?파이썬 트위스트에서 SSH 포트 포워딩을 어떻게 할 수 있습니까?

시나리오 :

나는 서버가 설치 트위스트 기반 RPC 클라이언트와 사용자 정의 트위스트 기반 Protobuf RPC 서비스와 기계를 실행해야합니다. 서버는 또한 SSH를 실행 중입니다. 서버에서 직접 RPC 서비스에 대해 이야기하는 대신 RPC 클라이언트의 SSH를 사용하여 서버에 연결하고 서버에서 포트 포워딩을 설정하고 SSH 터널을 통해 Protobuf를 사용하여 RPC 서비스와 통신하려고합니다.

수동으로 포트 전달을 설정할 수 있으며 RPC 클라이언트가 RPC 클라이언트를 클라이언트 상자의 로컬 포트로 가리켜 RPC 클라이언트와 대화 할 수있게되었습니다. 어떻게이 작업을 수행 할 수 있는지 궁금합니다. 클라이언트 내에서 직접

답변

4

Conch와 함께 깔끔한 작업을 수행 한 Twisted의 설명서가 있다면 정말 좋을 것입니다 (결국 다른 프로그래밍 가능한 SSH 라이브러리는 몇 개나 있습니까?). 그 행복한 날이 올 때까지 conch 명령 줄 도구의 구현을 읽는 것이 큰 도움이 될 수 있습니다.

명령 줄에서 포트 포워딩 옵션은 SSH 연결을 통해 어떤 행동으로 설정되어 여기에

우리가 볼 수

http://twistedmatrix.com/trac/browser/trunk/twisted/conch/scripts/conch.py#L188

내가 로컬 전달 규칙에 대해 묻는 것 같아, 그래서 localForwards 루프는 당신이 원하는 것을 대략하고 있습니다.

+0

감사합니다. 장 폴! – Bryan

4

로컬 포트 ​​포워딩을 수행하는 터널링 트위스티드 SSH 클라이언트 구현은 놀라 울 정도로 간단합니다.

는 그냥 basic Twisted Conch SSH client를 만들고 의 포트 포워딩 부분을 구현하는 클라이언트의 SSH 연결 클래스의 방법을 serviceStarted :

(REMOTEHOST가 ssh를 가리 키도록 설정되어 그것에있다 전부
from twisted.conch.ssh import forwarding 

LOCALPORT = 8888 
REMOTEHOST = "127.0.0.1" 
REMOTEPORT = 9999 

class Connection(connection.SSHConnection): 

    def serviceStarted(self): 
     Channel = forwarding.SSHListenClientForwardingChannel 
     Factory = forwarding.SSHListenForwardingFactory 
     factory = Factory(self, (REMOTEHOST, REMOTEPORT), Channel) 
     s = reactor.listenTCP(LOCALPORT, factory) 

서버 자체는 당신이 연결하고 있다고 말한 것입니다.)

관련 문제