设置
有一个主机(H1)在docker容器中运行gitlab-ce git服务器(C1)。主机的 OpenSSH 服务器在端口 22 上运行,并提供主机密钥密钥H.gitlab容器提供自己的SSH服务,发布到主机上10022:22
,并提供自己的主机密钥关键点。
问题
在单独的客户端系统上,当调用时,git clone git@H1:10022/<group>/<project>
我希望连接到容器内的 SSH 服务器C1。事实上,我只能连接到主机H1我得到了密钥H出现(似乎主机的端口 22 用于克隆)。当然,这会导致克隆失败。
但
通常(从同一个客户端)在定义远程时,从这个dockerized 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-stable 官方Dockerfile
答案1
从git 克隆(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 的语法没有任何方式来指定备用端口。scp 支持使用-P
选项进行端口选择,但该选项并未延续到 git 工具中。
scp 的语法user@host:path
模仿了 rcp,而 rcp 的出现早于网络,因此它不遵循 URL 约定。它只是碰巧看起来像一个无方案 URL。
git@H1:10022/group/project.git
git
指定主机上的用户,以及该用户主目录的H1
相对路径。10022/group/project.git
要访问端口 10022 上的 ssh 服务器,您必须使用语法ssh://
。