これは非常に簡単になるので、私にとって非常に役立ちます
たとえば、コマンドラインを使用してリモートMySQLサーバーに接続します
MySQLクライアント。
次のような「with」コンテキストステートメントを使用できます。
with tunnel(local=3307, remote=3306):
local('mysql --port=3007 --host=localhost' mydb < db/dbdump.sql')
これにより、mysqlダンプファイルをサーバーにアップロードする必要がなくなります。
インポートを実行できるようにするためだけに。
別のアプリケーションは、チェロキーWebサーバーを管理するためのものである可能性があります。
Cherokee Web管理者は、デフォルトでは、次のサーバーからのみアクセスできます。
実行中です。 だからあなたはあなたがトンネルしなければならない管理者にアクセスしたい
サーバーにアクセスし、ローカルポートを使用して管理インターフェイスにアクセスします。
これは、この機能を使用して簡略化することもできます。
with tunnel(local=9090, remote=9090):
sudo('cherokee-admin')
prompt('Stop cherokee admin?')
その最後の行は、入力を提供してトンネルが閉じるまでトンネルを開いたままにします。
もともとは、2009年11月2日午前9時30分ESTにTaras Mankovski (tarasm)によって提出されました。
トンネルがその逆もサポートするなら、それは素晴らしいことです。 リモートでリッスンし、ローカルホスト/他のローカルで利用可能なhost:portに転送することを意味します。
@munhitsuでも、それがFabricのユースケースであるかどうかはわかりません。 詳細を教えていただけますか?
アウトバウンドhttp /プロキシアクセスを持たないDMZセットアップを想像してみてください。
展開全体がファブリックを通過します。
このような場合、ファブリックを使用してsshを介してローカルプロキシをトンネリングし、DMZでプロビジョニングされているホストが一時的にアクセスできるようにすることができます。 現在、2番目のコンソールで別のsshトンネルを開いているので、ファブリックはこのトンネルの「コンテキスト」内で機能します。
使用例:
with rev_tunnel(local=8080, remote=8080):
sudo("http_proxy='http://localhost:8080' apt-get install -y puppet")
OK、それで、結局のところ、それはかなり標準的な逆トンネルのセットアップであり、あなたの望みは、トンネルの実行を処理することであり、たとえばlocal(ssh -R ...)
を実行する必要があることです。
私はこれが本当にコアに入る価値があるかどうかについて行き来しましたが、それが適切なファブリックでサポートされることは本当に理にかなっています。 他の解決策はハッキーであり(たとえば、 ssh
を実行しているスレッドまたはサブプロセス-これをうまく行う方法、Fabが実行するときにシャットダウンすることを確認するなど)、ユースケースの有効性を確認しています(ローカル共有実行中のリモートエンドのリソース。)
主な障害は、SSHlibがこれをまだサポートしているかどうかわからないことです。 私たちはそれを理解する必要があり、そうでない場合は誰かがそれを実装する必要があります。 (ただし、前述のssh -R
の回避策を固めるのではなく、このライブラリに追加するのは良いことだと思います。)
編集:#38では、実装やパッチ適用などについて説明しています。 これを実際に閉じて、実装すると、可能であればコンテキストマネージャーでトリガーできるはずであることに注意してください。
コンテキストに入る、コンテキストを離れる、さらに悪いことに複数レベルのコンテキストになるように実装するのは難しいことに完全に同意します。
編集について:この機能を利用できるようにするものは何でも良い考えです。
今のところ、物事をきめ細かく保つために、これは開いたままにしておきます。 1.4に割り当てたので、忘れないでください。 #38をやっているので、これを正しくノックアウトしようとする可能性があります。 マスターになったらここで更新します、ありがとう。
これは、実際には私が思っていたほど#38とは関係ありません。これは、SSH接続を介して追加のポートをトンネリングするのではなく、SSHトラフィック自体をゲートウェイすることだけが変更されているためです。 それには、別の(または少なくとも追加の)ソリューションが必要になります。 今のところパント、申し訳ありません:)(意味:まだ開いています。1.5では到着しません。)
最近、ポートに直接アクセスできないリモートrsyncサーバーと同期するためにこの機能が必要でしたが、paramikoのforward.pyデモコードに使用できるサンプルコードがあることがわかったので、私と私にとってうまく機能するソリューションを思いつきました。ここでforward.pyのパッチとして提出しました: https ://github.com/paramiko/paramiko/pull/504/
そのパッチからForwardServer
を追加し、 ForwardServer
のインスタンスを返すだけのlocal_tunnel()
を作成できます。 プルリクエストに関する@bitprophetからの推奨に従って、Fabricのパッチに取り組みます。
私は実際には気づいていませんでしたが、そのステータスについては完全にはわかりませんが、すでにlocal_tunnel()
のパッチがあります。 私は何をすべきか?
@haridsv可能であれば、テストして、そのパッチ(#939)で正常に使用したことを伝えると、役に立ちます。それ以外の場合は、しばらくお待ちください:)ありがとうございます。
この問題を解決する計画はありますか? これを一緒に解決する2つの未解決のプルリクエストがありますが、それらはレビューされていませんか? これをスピードアップできる方法はありますか?
#1218のコードを問題なく使用しています。
最も参考になるコメント
939はまだリリースバケットにあり、_some_のものをカットする必要があったため、次の1.11からパントしましたが、次の機能サイクルで優先されます。 (そして、#1218が#939に取って代わるように見えるので、おそらくそれをマージして、変更ログに#939をクレジットすることになります。)