sshトンネルを使用してSubversionのプロキシを設定するにはどうすればよいですか?


24

ローカル接続が遅いため、プロキシ経由でコードをチェックアウト/更新したい。ssh tunnelをセットアップします:ssh -D 8090 user@ssh.proxy.net すべてのパケットをlocalhost:8090に転送します。

これを使用するようにSubversionを設定するにはどうすればよいですか?

ssh  svn  proxy 

+1、良い質問です。私もこれを行う方法があるかどうかに興味があります。Wi-Fiが非常に遅く、同じ方法で設定されたSOCKSプロキシを介して参照することがよくあります。Subversion(または他の)で同じものを使用すると便利です。
ティムポスト

そして、プロキシはあなたのWi-Fiを高速化しますか?
innaM 2009

回答:


21

SSHを使用して、SSHサーバーにトンネリングするローカルSOCKSサーバーをセットアップしています。それを行う理由は「ローカル接続が遅い」ということですが、SSHサーバーへのトンネリングがどのように高速化するかはわかりません。

とにかく、あなたの問題は、SubversionがHTTPプロキシまたはSSHトンネルを介して接続できることですが、SOCKSについてはわかりません。そのため、すべてのTCP接続をキャプチャし、それらをSOCKSプロキシにリダイレクトすることにより、SubversionをSOCKSifyする必要があります。

以前にそれを行った人を言い換える代わりに、彼らの詳細な説明を紹介します:

または、簡単に言えば、主にOliverのページからcut'n'pasted:

Debianには、sourceforgeでも入手可能な2つのソックスが含まれています。最近更新されたものはProxyChainsであり、設定は非常に簡単です。ほとんどの靴下は同様の方法で動作するため、これらの指示は合理的な一般的なケースである必要があります。ProxyChainsを設定するには、$(HOME)/。proxychains / proxychains.confを編集して次の行のみを含める必要があります。

DynamicChain
tcp_read_time_out 15000
tcp_connect_time_out 10000
[ProxyList]
socks5 127.0.0.1 8090
# NB: for some reason 'localhost' doesn't work in the above line

あとは、ProxyChainsでsvnを「ラップ」するだけです。

proxychains svn commit

上記の例では、svnアプリケーションは、そのTCPがSubversionサーバーに接続することでSOCKSプロキシにリダイレクトされるという賢明なものではありませんでした。」


これは私のために働いてくれてありがとう。OS XでDNS転送が必要な場合は、このプロキシチェーンフォークを使用してください。github.com/haad/proxychainsに移動し、「proxy_dns」という行が最初の行の後の設定にあることを確認します。
グルノー

2

ここに投稿します。これを行うには、あまり手間がかからない方法を見つけました。あなたは使用することができますPolipoをその設定に以下の行を追加することで、HTTPプロキシを介して、あなたのSSH SOCKSのトンネルを使用します:

socksParentProxy = "localhost:8090"
socksProxyType = socks5

polipoデフォルトでは、ポートでリッスンします8123。そして、中に$HOME/.subversion/serversあなたのSubversionリポジトリのホスト(複数可)と命名されている場合、例えばからチェックアウトしたいSubversionのホストのグループを作成proj1.svn.domain.tldproj2.svn.domain.tldなど、その後に以下を追加[groups]セクション:

[groups]
domain = *.svn.domain.tld

最後に、グループにブロックを追加して、追加したホストのグループのプロキシ構成を指定します。

[domain]
http-proxy-host=localhost
http-proxy-port=8123

これで、以前はSSHトンネルなしで作業していたように、リポジトリを通常どおり操作できるようになります。

HTH


「localhost:8090」とは何ですか?
デキング

@Deqingは、polipoがそのアップストリームとして使用するSOCKSプロキシです。
アシッシュシュクラ

1

トンネリングについては知りませんssh -Dが、次のようなものを使用します

ssh -L8090:svn.server.com:22 user@other.server.com

その後、トンネルがオンになっている特定のポートを使用して、新しいプロトコルをSubversionに追加することにより、トンネリングを実行できます。したがって、〜/ .subversion / configに次のような行を追加します

pssh = ssh -p8090

[tunnels]節その後、代わりのsvn + sshを選択://user@original.com使用のsvn + PSSH:// localhostのユーザー@

既存の作業コピーがある場合は、使用できます

svn switch --relocate svn+ssh://user@original.com svn+pssh://user@localhost

新しいチェックアウトを行わずに作業コピーがリンクされているアドレスを切り替える。


よくわからない。仮定:私はもともとチェックアウトします:svn co svn://code.somewhere.com/prj prjそして、私は今何ができますか?基本的に、「svn + ssh://user@ssh.proxy.netの代わりに」の意味を本当に理解できません。ありがとう

あなたが得て作業コピーを持っている場合はsvn co svn+ssh://code.somewhere.com/prj prj、その後に入るprj/と実行すると、svn switch --relocate svn+ssh://code.somewhere.com svn+pssh://localhost/それが経て得られたかのような外観にWCを更新しますsvn co svn+pssh://localhost/prj prj
blahdiblah

どこかで誤解しているのかもしれません。実際に、サーバーAのコードをサーバーB(ssh -D 8090 user @ B)からローカルマシンにチェックアウトしたいのですが、これは実現可能ですか?svn co svn + pssh:// localhost / prj prjは、サーバーBのコードをチェックアウトしているようです。

私は知っているsshトンネリングでこれに対処するために更新しました。正しく理解できれば、「ssh -L8090:serverA.com:22 user@serverB.com」を使用してから「svn co svn + pssh:// user @ localhost / prj prj」を使用すると、サーバーAのコードがチェックアウトされます。マシン、サーバーB経由
blahdiblah 2009

あ!私は混乱がどこにあるのか見ていると思う。トンネルを設定すると、プロキシサーバーでシェルが開始されますが、svnコマンドが実行される場所ではありません。これらは、コンピューターの別のシェルで発生するはずです。sshの-fフラグは、同じシェルの使用を許可する場合があります。
blahdiblah

1

〜/ .subversion /にあるデフォルトの設定ファイルを見てください。コメントアウトされた便利な例がたくさんあります。プロキシは〜/ .subversion / serversにセットアップされます


1

Windows PCでsocksプロキシサーバーを介してSVNリポジトリへのsvn + ssh接続を取得する必要がある場合があります。この問題は、SSH機能を提供し、さまざまなプロキシタイプで機能するPuttyで解決できます。提案されたソリューションは、ローカルポート転送を必要としません。

  1. パテを起動してセッションを作成します(例:socks_proxy)
  2. プロキシホスト名ポートを送信する必要があるセッション(接続->プロキシ)のみのプロキシを構成します。Puttyは、SOCKS4とSOCKS5の両方を含むさまざまなプロキシタイプを選択して動作します。オプションで、プロキシアクセス用のユーザー名パスワードを指定できます。
  3. セッションを保存します。セッションには接続用のホスト名が設定されていないことに注意してください。
  4. SVN構成ファイルApplication Data \ Subversion \ configを開き、セクション[トンネル]を見つけます
  5. :セクションのタイトルの下に追加SVNのプロトコル記述入れSSH = PATH_TO_PLINK / PLINK.EXE -load socks_proxyを。実際にはプロトコル名が選択されるため、sshがすでに使用されている場合は任意の名前を選択できます(たとえば、ssh =の代わりにpssh =を使用します)。
  6. SSHを使用してsvnserveを実行するターゲットサーバーへのSSHアクセスのキーを設定します。キーを維持するためにページェントを使用することをお勧めします。
  7. svn + sshアクセスにはsvnを使用します。ユーザー名はURLで渡す必要があります-svn ls svn + protocol_name:// username @ server / repositoryプロトコル名は、SVN設定の[tunnels]セクションで使用される実際の名前に置き換える必要があります。

内容-SVNはプロトコル名を使用してplink.exeを接続に使用することを検出し、plinkはセッション名socks_proxyを使用してプロキシが存在することを識別します。ことを忘れないでくださいPATH_TO_PLINKはないバックスラッシュで、スラッシュで入力する必要があります。\プログラムファイル\パテ:plink.exeはCフォルダにある機会のための例はssh = C:/プログラムファイル/パテ/ PLINK.EXE -load socks_proxy


1

あなたは与えるかもしれないtsocks試してみます。tsocksでは、SOCKSプロキシSSHセットアップを使用するように設定し、次のようにsvnを実行します。

tsocks svn co {etc...}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.