git clone ssh синтаксическая разница?

Настроить

В док-контейнере (C1) находится хост (H1), на котором работает git-сервер gitlab-ce. Сервер OpenSSH хоста работает на порту 22 и предоставляет ключ ключа хоста. Контейнер gitlab предоставляет собственную службу SSH, которая публикуется для размещения как 10022:22 и предоставляет собственный ключ хоста keyC.

проблема

На отдельной клиентской системе при звонке git clone git@H1:10022/<group>/<project> Я ожидаю получить соединение с сервером SSH в контейнере C1. Действительно, я получаю соединение только с узлом 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 client 1.9.1
  • gitlab 7.13-stable официальный Dockerfile

1 ответ

Решение

Из 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.

user@host:path синтаксис scp является имитацией rcp, и rcp предшествует сети, поэтому он не следует соглашениям URL. Это только случайно выглядит как бесхарактерный URL.

git@H1:10022/group/project.git указывает пользователя git на хосте H1и относительный путь 10022/group/project.git из домашнего каталога этого пользователя.

Для доступа к серверу ssh через порт 10022 вам необходимо использовать ssh:// синтаксис.

Другие вопросы по тегам