1

SSH 访问github在中国已被阻止,我按照本教程设置了一个 ssh 隧道:

$ plink -N myuser@myhomessh.com -pw mypassword -L 9418:github.com:9418
$ git clone git://localhost/someuser/someproject.git

我无法github通过Git Read-Onlyurl 推送代码。
所以我试试这个:

$ git clone git@localhost:someuser/someproject.git
Cloning into 'someproject'...
git@localhost's password: 

这里不对劲。我已经添加~/.ssh/id_rsa.pubgithub.

4

2 回答 2

2

使用您的 SSH 隧道,您正在创建一个到端口 9418 的隧道。运行简单的 git 服务器,它只允许未经身份验证的只读访问。你不能推到那里。请注意,在您的第一个示例中,您使用了git://协议,这表明它连接到端口 9418 并使用该协议。

在您的第二个示例中,您尝试通过 SSH 使用 git,这会在端口 22 上创建连接。您可以使用类似这样的东西来创建 SSH 隧道(假设您已经有一个本地运行的 SSH 服务器已经在本地侦听端口 22 )

plink -N myuser@myhomessh.com -pw mypassword -L 2222:github.com:22
git clone ssh://git@localhost:2222/someuser/someproject.git
于 2012-05-23T10:41:13.980 回答
0

好吧,该git clone git@localhost:someuser/someproject.git命令尝试localhost使用 SSH(在端口 22 上)连接到您。我不知道为什么它要求提供凭据(好像有什么东西在这个端口上监听)。

在我看来,克服这种脑死限制的唯一明智方法是在某个 IP 子网中设置一个SSH 跳转主机,该子网没有阻止访问(即中国境外)。

也可能有其他(姑息性)解决方案:

  • 如果您需要托管自己的代码,请不要使用 github,因为其他 Git 托管服务提供商可能无法访问它们。
  • 如果您需要推送到您不拥有的项目,您可能会采用次优的代码贡献方式:将补丁系列或git bundle“d 变更集”邮寄给维护者或愿意赞助您的代码的其他人。

更新:好吧,我重新阅读了您的答案,看来您确实在 localhost 上运行了某种 SSH 服务器。因此,澄清一下:在与github 的 SSH 服务器而不是本地 SSH 服务器通信时,您的客户端使用在 github 进行身份验证的 SSH 密钥。我的意思是,要使用协议从 github 克隆 repo,git://您​​根本不需要设置任何类型的隧道。而要通过 SSH 访问 github,您总是必须通过 SSH 连接到 github,而 SSH 会被阻止。如果 github 有另一个端口(不是 22)来接受 SSH 连接,那就太好了。但我不知道他们是否有类似的东西可用。

于 2012-05-23T08:10:53.183 回答