2

リモートデータベースにクエリを送信する目的で、paramiko モジュールを使用して、任意のサーバーへの SSH トンネルをオンデマンドで作成しようとしています。paramiko に同梱されている forward.py デモを使用しようとしましたが、大きな制限は、ソケット サーバーの起動後に SSH トンネルと SSH 接続を閉じる簡単な方法ではないように思われることです。

制限は、シェルからこれをアクティブにしてから、手動でシェルを強制終了してリスナーを停止できないことです。SSH 接続、トンネルを開き、トンネルを介していくつかのアクションを実行し、トンネルを閉じ、Python 内で SSH 接続を閉じる必要があります。

server.shutdown() メソッドへの参照を見てきましたが、それを正しく実装する方法が明確ではありません。

4

1 に答える 1

5

「正しく実装する」とはどういう意味かわかりません。サーバーオブジェクトを追跡し、必要なshutdownときに呼び出す必要があります。ではforward.py、の最後の行forward_tunnel

ForwardServer(('', local_port), SubHander).serve_forever()

そのため、サーバーオブジェクトに簡単にアクセスできなくなります。ただし、これを次のように変更できます。

global theserver
theserver = ForwardServer(('', local_port), SubHander)
theserver.serve_forever()

forward_tunnelそして、別のスレッドで関数を実行します。これにより、main関数は(上記の別のスレッドで実行されている間)制御を取り戻し、適切で必要なときにいつでもserve_forever呼び出すことができます。theserver.shutdown()

于 2010-05-06T01:46:41.473 に答える