2012-10-03 9 views
5

Conistを使用してTwisted内からポート転送オプションを使用してリモートマシンにSSHセッションを開始する例はありますか?通常のTCPトラフィックをトンネル経由でパイプすることができますか?Python Twistedから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

ありがとうJean-Paul! – Bryan

4

ローカルポート転送を行うトンネリングツイスト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) 

(REMOTEHOSTはSSHを指すように設定されていることにありますすべてです:

だけbasic Twisted Conch SSH clientを作成し、でポートフォワーディング部分を実装するには、クライアントのSSH接続クラスの方法をserviceStartedそれはあなたが接続していると言っているからです)。

関連する問題