如何使用 ssh 隧道为 subversion 设置代理?

如何使用 ssh 隧道为 subversion 设置代理?

由于本地连接速度较慢,我想通过代理检查/更新代码。我设置了 ssh 隧道: 将所有数据包转发到我的 localhost:8090。ssh -D 8090 [email protected]

我该如何设置 subversion 来使用它?

答案1

您正在使用 SSH 设置本地 SOCKS 服务器,该服务器通过隧道连接到您的 SSH 服务器。您提到这样做的原因是“本地连接速度很慢”,但我看不出通过隧道连接到 SSH 服务器如何能使其速度更快。

无论如何,您的问题是 Subversion 可以通过 HTTP 代理或 SSH 隧道进行连接,但它对 SOCKS 一无所知。因此,您需要通过捕获所有 TCP 连接并将它们重定向到 SOCKS 代理来使 Subversion SOCKS化。

我不会解释那些以前做过这件事的人的话,而是向你指出他们的详细解释:

或者简而言之,大部分内容都是从 Oliver 的页面上剪切粘贴的:

Debian 包含两个 socksifier,它们也可以在 sourceforge 上找到。最近更新的是 ProxyChains,它的配置非常简单。大多数 socksifier 的工作方式类似,因此这些说明应该是合理的一般情况。要配置 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 应用程序根本没有意识到它与 Subversion 服务器的 TCP 连接被重定向到了 SOCKS 代理。”

答案2

我发现了一种不太笨拙的方法来做到这一点,因此在此发布。您可以使用波利波通过在其配置中添加以下行来通过 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 隧道一样。

高血压

答案3

我不知道如何建立隧道,ssh -D但可以使用类似

ssh -L8090:svn.server.com:22 [email protected]

然后,您可以通过向 subversion 添加新协议以及隧道所在的特定端口来实现隧道。因此,在 ~/.subversion/config 中添加如下行

pssh = ssh -p8090

[tunnels]部分中,然后代替 svn+ssh://[电子邮件保护]使用 svn+pssh://user@localhost

如果你有现有的工作副本,你可以使用

svn switch --relocate svn+ssh://[email protected] svn+pssh://user@localhost

切换工作副本所链接的地址,而不必进行新的签出。

答案4

有时候需要视窗PC 通过 svn+ssh 连接 SVN 仓库socks 代理服务器。此问题可通过提供 SSH 功能并可与不同代理类型配合使用的 Putty 解决。建议的解决方案不需要本地端口转发。

  1. 启动 putty 并创建会话(例如 socks_proxy)
  2. 配置仅有的需要提交的会话的代理(连接->代理)代理主机名港口。Putty 可与包括 SOCKS4 和 SOCKS5 在内的不同代理类型配合使用。您也可以选择提供用户名密码用于代理访问。
  3. 保存会话。请记住,该会话将没有配置主机名进行连接。
  4. 打开SVN配置文件应用程序数据\Subversion\config并找到部分[隧道]
  5. 在章节标题下方放置额外的 SVN 协议描述:ssh=PATH_TO_PLINK/PLINK.EXE -加载 socks_proxy。实际上,协议名称由您选择,因此如果已经使用 ssh,您可以选择任何名称(例如使用pssh=代替ssh=)。
  6. 配置密钥以通过 SSH 访问将使用 SSH 运行的目标服务器svnserve.建议使用pageant来维护密钥。
  7. 使用 svn 进行 svn+ssh 访问。用户名应在 URL 中传递 -svn ls svn+协议名称://用户名@服务器/存储库其中协议名称应该替换为实际使用的名称[隧道]SVN 配置部分。

这是什么 - SVN 将使用协议名称来检测是否应使用 plink.exe 进行连接,并且 plink 将使用会话名称socks_proxy识别代理是否存在。请记住路径到 PLINK应该用斜线输入,而不是反斜线。例如,当 plink.exe 位于文件夹 C:\Program Files\Putty 中时:ssh=C:/Program Files/Putty/PLINK.EXE -load socks_proxy

相关内容