无法使用corkscrew通过代理建立与eclipse gerrit的ssh连接

时间:2012-07-26 19:29:00

标签: eclipse git ssh gerrit ssh-tunnel

在我的学院,我只能通过代理访问受限制的互联网。我在建立与gerrit代码审查系统(git.eclipse.org)的ssh连接时面临一些严重问题,因此无法向Gerrit推送任何新补丁。

为了执行上述任务,我首先尝试使用corkscrew通过HTTP隧道连接SSH,遵循给出的here指令 这就是我所做的:

  1. 安装开瓶器
  2. 将ProxyCommand添加到ssh config
  3. 为文件添加了代理用户名和代理验证密码 的〜/ .ssh / proxyauth
  4. 在此之后,我成功设置了连接到github 的ssh,并且还将更改推送到我的github repo。

    但是我无法通过ssh连接到gerrit。这是确切的错误:

    $ssh -p 29418 jgupta@git.eclipse.org
    Proxy could not open connnection to git.eclipse.org:  Forbidden
    ssh_exchange_identification: Connection closed by remote host
    

    我正在使用Linux(RHEL 6.3 Beta x86_64)和git 1.7.11.1(最新版) 〜/ .ssh / config的内容是:

    Host github.com
      Hostname ssh.github.com
      Port 443
      ProxyCommand corkscrew 202.141.80.22 3128 %h %p ~/.ssh/proxyauth
    
    Host *
      ProxyCommand corkscrew 202.141.80.22 3128 %h %p ~/.ssh/proxyauth
    

    对git.eclipse.org的ssh请求的详细(错误)结果是:

    penSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
    debug1: Reading configuration data /home/jayant/.ssh/config
    debug1: Applying options for *
    debug1: Reading configuration data /etc/ssh/ssh_config
    debug1: Applying options for *
    debug2: ssh_connect: needpriv 0
    debug1: Executing proxy command: exec corkscrew 202.141.80.22 3128 git.eclipse.org 29418 ~/.ssh/proxyauth
    debug1: permanently_drop_suid: 500
    debug1: identity file /home/jayant/.ssh/identity type -1
    debug2: key_type_from_name: unknown key type '-----BEGIN'
    debug2: key_type_from_name: unknown key type 'Proc-Type:'
    debug2: key_type_from_name: unknown key type 'DEK-Info:'
    debug2: key_type_from_name: unknown key type '-----END'
    debug1: identity file /home/jayant/.ssh/id_rsa type 1
    debug1: identity file /home/jayant/.ssh/id_dsa type -1
    Proxy could not open connnection to git.eclipse.org:  Forbidden
    ssh_exchange_identification: Connection closed by remote host
    

    我的git仓库中设置的远程网址是:

    $git remote -v
    origin  http://git.eclipse.org/gitroot/etrice/org.eclipse.etrice.git (fetch)
    origin  http://git.eclipse.org/gitroot/etrice/org.eclipse.etrice.git (push)
    review  ssh://jgupta@git.eclipse.org:29418/etrice/org.eclipse.etrice.git (fetch)
    review  ssh://jgupta@git.eclipse.org:29418/etrice/org.eclipse.etrice.git (push)
    

    几天前,当我直接访问互联网时,我可以通过ssh进行连接,并使用上述远程设置推送我的补丁。

    我尝试删除known_hosts的内容,但这没有帮助 这是gerrit服务器的问题吗?

    提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我觉得问题是由于不支持的服务器配置造成的。这是我在网络上的博客文章中发现的:

  

基本思想是你会以某种方式调用socat(类似的实用工具)   to corkscrew),它将与HTTP(S)代理服务器协商   使用CONNECT方法为您提供一个干净的管道到服务器上   远方。
  ...
  注意到许多企业防火墙阻止访问   在443以外的端口上的CONNECT方法,github上的好人都有   如果您使用主机“ssh.github.com”,则在443上侦听ssh服务器,   所以你可以在上面的ssh配置中替换主机名和端口   适当的节,你已经完成了

上述摘录摘自here

我的感觉是,因为gerrit正在端口29418上运行,并且由于代理通常只允许访问CONNECT方法,因为远程主机(服务器)的端口443上的请求,因此gerrit的ssh请求无法在代理处协商。

github不会发生这种情况,因为它在端口443上提供ssh请求,客户端实用程序(如corkscrew)可以通过在远程服务器的端口443上发送发送请求来协商代理(如.ssh /的快照中所做的那样)上面的配置)。

有没有人知道执行上述任务的其他方法?