Ssh

git clone ssh 語法區別?

  • July 30, 2015

設置

在 docker 容器 ( C1 ) 中有一個執行 gitlab-ce git 伺服器的主機 ( H1 )。主機的 OpenSSH 伺服器在埠 22 上執行並提供主機密鑰keyH。gitlab 容器提供自己的 SSH 服務,該服務發佈到類似主機,並提供自己的主機密鑰keyC10022: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://語法。

引用自:https://serverfault.com/questions/709617