0

在我的研究所,我只能通过代理访问互联网。我在建立与 Gerrit 代码审查系统 (git.eclipse.org) 的 ssh 连接时遇到了一些严重问题,因此无法向 Gerrit 推送任何新补丁。

为了执行上述任务,我首先尝试使用开瓶器通过 HTTP 隧道 SSH,按照此处给出的说明, 这就是我所做的:

  1. 安装好的开瓶器
  2. 将 ProxyCommand 添加到 ssh 配置
  3. 在文件 ~/.ssh/proxyauth 中添加了代理用户名和代理认证密码

在此之后,我成功地设置了一个连接到 github 的 ssh,并将更改推/拉到我的 github 存储库。

但是我无法通过 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 repo 中设置的远程 url 是:

$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服务器的问题吗?

在此先感谢您的帮助。

4

1 回答 1

0

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

基本思想是,您将以某种方式调用 socat(类似于 corkscrew 的实用程序),它将使用 CONNECT 方法与 HTTP(S) 代理服务器协商,为您提供通往远端服务器的干净管道。
...
注意到许多公司防火墙阻止访问 443 以外的端口上的 CONNECT 方法,如果您使用主机“ssh.github.com”,github 上的好人有一个 ssh 服务器侦听 443,因此您可以替换上述 ssh 配置节中的主机名和端口(视情况而定),一切就绪

上面的摘录取自这里

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

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

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

于 2012-07-28T12:11:39.460 回答