6

トンネルを介して通常の TCP トラフィックをパイプできるように、Conch を使用して Twisted 内からポート転送オプションを使用してリモート マシンへの SSH セッションを開始する例はありますか?

シナリオ:

カスタム Twisted ベースの Protobuf RPC サービスを実行しているサーバーと、Twisted ベースの RPC クライアントがインストールされたマシンがあります。サーバーもSSHを実行しています。サーバー上の RPC サービスと直接対話するのではなく、RPC クライアントから SSH を使用してサーバーに接続し、サーバーでポート転送をセットアップし、SSH トンネル経由で Protobuf を使用して RPC サービスと通信したいと考えています。

私はすでにポート転送を手動でセットアップし、RPC クライアントをクライアント ボックスのローカル ポートに向けることで RPC クライアントに RPC サービスと通信させることができます。クライアント内でこれを直接行う方法に興味があります。 .

4

2 に答える 2

4

Twisted で Conch をうまく使うための改善されたドキュメントがあれば最高です (結局のところ、プログラム可能な SSH ライブラリは他にいくつありますか?)。その幸せな日が来るまで、conchコマンド ライン ツールの実装を読むことは大きな助けになります。

ここでは、コマンド ラインからのポート フォワーディング オプションが、SSH 接続を介して何らかのアクションに変換される場所を確認できます。

https://github.com/twisted/twisted/blob/4ffbe9f6851dbe7e9172f55905f264ecf50da3a6/src/twisted/conch/scripts/conch.py​​#L226-L238

ローカル転送ルールについて質問していると思うので、localForwardsループはおおまかにやりたいことをやっています。

于 2012-10-03T20:18:41.070 に答える
4

ローカル ポート フォワーディングを行うトンネリング Twisted SSH クライアントの実装は驚くほど簡単です。

基本的な Twisted Conch SSH クライアントを作成し、クライアントの SSH 接続クラスのserviceStartedメソッドにポート転送部分を実装するだけです。

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サーバー自体を指すように設定されています)。

于 2014-05-08T17:52:34.577 に答える