如何使用ssh隧道设置用于颠覆的代理?


24

我想通过代理签出/更新代码,因为我的本地连接速度很慢。我设置了ssh tunnel:ssh -D 8090 user@ssh.proxy.net 将所有数据包转发到我的localhost:8090。

如何设置Subversion以使用此功能?

ssh  svn  proxy 

+1,好问题。我很想知道是否也有办法做到这一点。我的Wi-Fi速度很慢,并且经常通过以相同方式设置的SOCKS代理进行浏览,因此让Subversion(或其他)使用相同的方式很方便。
蒂姆·波斯特

代理使您的Wi-Fi速度更快?
innaM

Answers:


21

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

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

我将向您指出他们的详细解释,而不是对以前做过的那些人进行表述:

或简而言之,主要是从Oliver的页面上剪切下来的:

Debian包含两个socksifier,也可以在sourceforge上使用。最近更新的是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转发,请使用此proxychain分支。github.com/haad/proxychains,并确保“ proxy_dns”行位于第一行之后的配置中。
古诺(Gourneau)2013年

2

在这里发帖,因为我发现这样做不太费劲。您可以使用Polipo通过在HTTP代理的配置中添加以下几行来通过HTTP代理使用SSH SOCKS隧道:

socksParentProxy = "localhost:8090"
socksProxyType = socks5

polipo默认监听端口8123。然后$HOME/.subversion/servers创建一个组颠覆主机要从,例如,如果你的Subversion版本库的主机(S)被命名为检查proj1.svn.domain.tldproj2.svn.domain.tld等等,然后添加下列[groups]部分:

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

最后,通过为该组主机添加一个块,为刚添加的主机组指定代理配置:

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

在这之后,您应该能够正常地在存储库上进行操作,因为您以前无需使用SSH隧道即可工作。

高温超导


“ localhost:8090”的作用是什么?
德庆

@Deqing是SOCKS代理,polipo将其用作上游代理。
Ashish SHUKLA 2013年

1

我不知道与隧道,ssh -D但使用类似

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

然后,您可以通过使用隧道所在的特定端口向颠覆添加新协议来进行隧道传输。因此,在〜/ .subversion / config中添加一行

pssh = ssh -p8090

在该[tunnels]部分中,然后使用svn + pssh:// user @ localhost代替svn + ssh://user@original.com

如果您已有工作副本,则可以使用

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

也许我们误解了某个地方。实际上,我想通过服务器B(ssh -D 8090 user @ B)将服务器A上的代码签出到本地计算机,这可行吗?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

啊! 我想我知道混乱可能在哪里。设置隧道会在代理服务器上启动外壳程序,但这不是svn命令发生的地方。这些应该在计算机上的单独外壳中进行。ssh的-f标志可能允许使用相同的shell。
blahdiblah

1

在〜/ .subversion /中查看默认配置文件。有很多有用的示例已注释掉。代理将在〜/ .subversion / servers中设置


1

有时在Windows PC 上需要通过socks代理服务器将svn + ssh连接到SVN存储库。可以使用提供SSH功能并且可以与不同代理类型一起使用的Putty解决此问题。建议的解决方案不需要本地端口转发。

  1. 启动腻子并创建会话(例如socks_proxy)
  2. 为需要提交代理主机名Port的会话(Connection-> Proxy)配置代理。Putty可以选择包括SOCKS4和SOCKS5在内的不同代理类型。(可选)您可以提供用于代理访问的用户名密码
  3. 保存会话。请记住,会话将没有配置用于连接的主机名
  4. 打开SVN配置文件Application Data \ Subversion \ config并找到[tunnels]部分
  5. 在标题部分下面放置其他SVN协议描述:ssh = PATH_TO_PLINK / PLINK.EXE -load socks_proxy。实际上,协议名称是您的选择,因此,如果已经使用ssh,则可以选择任何名称(例如,使用pssh =而不是ssh =)。
  6. 配置用于SSH访问目标服务器的密钥,在该服务器上将使用SSH运行svnserve。建议使用选美来维护密钥。
  7. 使用svn进行svn + ssh访问。用户名应在URL中传递-svn ls svn + protocol_name:// username @ server / repository,其中协议名应替换为SVN配置的[tunnels]部分中使用的真实名称。

这是什么-SVN将使用协议名称来检测应使用plink.exe进行连接,而plink将使用会话名称socks_proxy来标识存在的代理。请记住,PATH_TO_PLINK应该以斜杠而不是反斜杠输入。plink.exe位于文件夹C:\ Program Files \ Putty中的情况的示例:ssh = C:/ Program Files / Putty / PLINK.EXE -load socks_proxy


1

您可以尝试一下tsocks。使用tsock,您可以将其配置为使用SOCKS代理SSH设置,然后按以下方式运行svn:

tsocks svn co {etc...}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.