hg clone无法访问网络

时间:2016-03-06 03:42:24

标签: proxy mercurial

我的firefox上安装了Autoproxy,购买vps服务后,可以通过socket5代理服务浏览每个网页。

apt-get install mercurial  #on my local pc
hg clone https://vim.googlecode.com/hg/   /tmp/vim  #on my local pc
abort: error: Network is unreachable
在Firefox中可以通过autoproxy访问

https://vim.googlecode.com/hg/ 如何在我的远程VPS上构建某种代理服务以使hg clone命令到达https://vim.googlecode.com/hg/

并非所有网站都可以在这里访问,我已经建立了一个梯子,可以通过Firefox访问它们。

如何在我的VPS上(在远程PC上)制作另一个梯形图,以便在我的本地PC上运行hg clone命令?

每当我用我的VPS和Firefox制作阶梯时,这样:

  1. 在我的本地电脑中输入ssh命令

    ssh -D 127.0.0.1:1080  -p 1234 root@44.44.44.44
    
  2. 单击Autoproxy插件进入全局模式。它在Socket 5代理中设置为良好状态。

  3. 现在我可以访问我想要访问的内容了。

  4. 如何编写hg clone命令?

2 个答案:

答案 0 :(得分:2)

要为Mercurial使用代理,您可以在命令前添加http_proxy

http_proxy=http://proxy-server:8080 hg clone https://vim.googlecode.com/hg

或在~/.hgrc中配置为:

[http_proxy]
host=proxy-host:port
user=username
passwd=password

由于您使用的是SOCKS5代理,Mercurial尚未支持此功能(撰写本文时为3.7.2),但根据下面的an extension,它有patch

扩展

您可以下载Mercurial DVCS的小扩展程序以启用SOCKS5代理:https://bitbucket.org/bugheisen/socks_proxy

因此,您可以在~/.hgrc中将代理配置为:

[extensions]
socks_proxy = /path/to/socks_proxy.py

[socks_proxy]
host = localhost:9150
  

要试验SOCKS5代理,您可以使用SSH的-D选项,   这会创建一个通过SSH连接运行的代理。   或者,您可以运行Tor,它也会启动SOCKS5代理   (可能在端口9050或端口9150上)。

修补程序

上述扩展程序基于Bug Heisen发布的原始修补程序,您可以downloading the source code of Mercurial申请并根据以下代码应用此patch

diff -r 12f161f08d74 -r 3f58227755ed mercurial/url.py
--- a/mercurial/url.py  Tue Apr 01 23:41:32 2014 -0700
+++ b/mercurial/url.py  Sun Apr 06 16:16:02 2014 +0200
@@ -63,6 +63,44 @@

 class proxyhandler(urllib2.ProxyHandler):
     def __init__(self, ui):
+
+        # First, check if a SOCKS5 proxy is set, using a line 'host = ...' in 
+        # the [socks_proxy] section of the config file.
+
+        proxyurl = ui.config("socks_proxy", "host")
+
+        if proxyurl:
+            idx = proxyurl.find(":")
+            if idx < 0:
+                raise util.Abort(_("host in socks_proxy should be "
+                                   "hostname:port"))
+
+            host = proxyurl[:idx]
+            portstr = proxyurl[idx+1:]
+            try:
+                port = int(portstr)
+            except ValueError:
+                raise util.Abort(_("Cannot interpret '%s' in the socks_proxy "
+                                   "host line as an integer port number") 
+                                   % portstr)
+
+            if port <= 0 or port > 65535:
+                raise util.Abort(_("Port number in socks_proxy host line "
+                                   "must lie between 1 and 65535, but is "
+                                   "%d") % port)
+
+            ui.note("Setting SOCKS5 proxy to %s:%d\n" % (host, port))
+                    
+            try:
+                import socks
+                socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, host, port)
+                socket.socket = socks.socksocket
+            except ImportError:
+                raise util.Abort(_("The SocksiPy socks module is needed for "
+                                   "SOCKS support"))
+
+        # Then check for a http/https proxy
+        
         proxyurl = ui.config("http_proxy", "host") or os.getenv('http_proxy')
         # XXX proxyauthinfo = None

然后在~/.hgrc使用socks_proxy而不是http_proxy(如上所示)。

关于此补丁的原始说明:

  

此补丁添加了对SOCKS5代理的支持,使用&#39; socks&#39;模   来自SocksiPy项目(需要单独安装)。因为   它是&#39; proxyhandler&#39;被修改的功能,它只会起作用   用于HTTP / HTTPS协议。对于SSH协议,使用SOCKS代理   通过指定,可以很容易地在Mercurial之外完成   ProxyCommand选项。

     

补丁中有SOCKS5版本的硬编码,但是socks   模块也应该支持其他版本。所以其他SOCKS版本   可能以相同的方式,但代码将需要修改   支持他们。

     

出于测试目的,知道SSH可以创建SOCKS5是一件好事   使用-D命令行标志的代理。使用Tor也会生成这样的   代理,通常在端口9050或9150上。

答案 1 :(得分:-1)

我建议首先为本地mercurial实例配置代理设置。检查hg help config并在那里寻找代理。

"http_proxy"
------------

Used to access web-based Mercurial repositories through a HTTP proxy.

"host"
    Host name and (optional) port of the proxy server, for example
    "myproxy:8000".

"no"
    Optional. Comma-separated list of host names that should bypass the
    proxy.

"passwd"
    Optional. Password zur Authentifikation mit einem Proxy-Server.

"user"
    Optional. User name to authenticate with at the proxy server.

"always"
    Optional. Always use the proxy, even for localhost and any entries in
    "http_proxy.no". (default: False)