git克隆ssh语法的区别?

build立

在Docker容器( C1 )中有一台主机( H1 )运行gitlab-ce git服务器。 主机的OpenSSH服务器在端口22上运行,并提供主机密钥keyH 。 gitlab容器提供自己的SSH服务,发布到像10022:22这样的主机,并提供一个自己的主机密钥keyC

问题

在一个单独的客户端系统上,当调用git clone git@H1:10022/<group>/<project>我希望能够连接到容器C1内的SSH服务器。 事实上,我只能连接到主机H1 ,我得到了keyH (看起来主机的22号端口用于克隆)。 当然,这导致克隆失败。

通常(从同一个客户端)拉和推forms这个docker化的git服务器工作时定义一个远程像:

 git remote -v origin ssh://git@H1:10022/group/project.git (fetch) origin ssh://git@H1:10022/group/project.git (push) 

所以看起来, ssh://git@H1...git@H1...之间的协议有所不同。 但是我认为git只通过HTTP(S)或SSH进行通信? 这里有什么区别/问题?

平台

  • Ubuntu 14.04.2(今天上游补丁级别)
  • git客户端1.9.1
  • gitlab 7.13稳定的官方Dockerfile

git-clone (1):

 GIT URLS ... The following syntaxes may be used with them: o ssh://[user@]host.xz[:port]/path/to/repo.git/ ... An alternative scp-like syntax may also be used with the ssh protocol: o [user@]host.xz:path/to/repo.git/ 

scp-like语法没有任何方法来指定备用端口。 scp支持使用-P选项的端口select,但是这个选项并没有被带入到git工具中。

scp的user@host:path语法是模仿rcp,rcp早于web,所以不遵循URL约定。 它只巧合看起来像一个无计划的URL。

git@H1:10022/group/project.git指定主机H1上的用户git ,以及该用户主目录中的相对path10022/group/project.git

要访问端口10022上的ssh服务器,你将不得不使用ssh://语法。