Ssh
git clone ssh 語法區別?
設置
在 docker 容器 ( C1 ) 中有一個執行 gitlab-ce git 伺服器的主機 ( H1 )。主機的 OpenSSH 伺服器在埠 22 上執行並提供主機密鑰keyH。gitlab 容器提供自己的 SSH 服務,該服務發佈到類似主機,並提供自己的主機密鑰keyC。
10022:22
問題
在單獨的客戶端系統上,呼叫時
git clone git@H1:10022/<group>/<project>
我希望連接到容器C1中的 SSH 伺服器。事實上,我只連接到主機H1並且我得到了keyH(似乎主機的埠 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
來自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 的語法無法指定備用埠。scp 支持使用該
-P
選項進行埠選擇,但該選項並未延續到 git 工具中。scp的
user@host:path
語法是對 rcp 的模仿,而且 rcp 早於 web,所以它不遵循 URL 約定。它只是巧合地看起來有點像無方案的 URL。
git@H1:10022/group/project.git
指定git
主機上的使用者H1
,以及該使用者主目錄的相對路徑10022/group/project.git
。要訪問埠 10022 上的 ssh 伺服器,您將不得不使用
ssh://
語法。