ParamikoのSSHトンネルをプログラムでシャットダウンします
質問
リモートデータベースを照会する目的で、任意のサーバーにオンデマンドでSSHトンネルを作成するためにParamikoモジュールを使用しようとしています。 Paramikoに出荷されるForward.pyデモを使用しようとしましたが、ソケットサーバーが起動するとSSHトンネルとSSH接続を閉じる簡単な方法はないようです。
私たちが持っている制限は、シェルからこれをアクティブにして、シェルを手動で殺してリストナーを停止できないことです。 SSH接続を開き、トンネルを開き、トンネルを介していくつかのアクションを実行し、トンネルを閉じ、Python内のSSH接続を閉じる必要があります。
server.shutdown()メソッドへの参照を見てきましたが、それを正しく実装する方法は明確ではありません。
どんな助けも大歓迎です...
解決
「正しく実装する」という意味がわかりません - サーバーオブジェクトを追跡して呼び出すだけでよいです shutdown
あなたが望むときにそれに。の forward.py
, 、サーバーは追跡されていません。 forward_tunnel
は
ForwardServer(('', local_port), SubHander).serve_forever()
そのため、サーバーオブジェクトはもはや簡単にアクセスできません。しかし、あなたはそれをただ変えることができます、例:
global theserver
theserver = ForwardServer(('', local_port), SubHander)
theserver.serve_forever()
そして、実行します forward_tunnel
別のスレッドで機能します main
関数は制御を取り戻します(while serve_forever
言われた別々のスレッドで実行されています)と呼び出すことができます theserver.shutdown()
それが適切で必要なときはいつでも。
所属していません StackOverflow