在我的学院,我只能通过代理访问受限制的互联网。我在建立与gerrit代码审查系统(git.eclipse.org)的ssh连接时面临一些严重问题,因此无法向Gerrit推送任何新补丁。
为了执行上述任务,我首先尝试使用corkscrew通过HTTP隧道连接SSH,遵循给出的here指令 这就是我所做的:
在此之后,我成功设置了连接到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服务器的问题吗?
提前感谢您的帮助。
答案 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 /的快照中所做的那样)上面的配置)。
有没有人知道执行上述任务的其他方法?