Назад | Перейти на главную страницу

Git clone ssh - разница в синтаксисе?

Настроить

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

Проблема

В отдельной клиентской системе при звонке git clone git@H1:10022/<group>/<project> Я ожидаю получить соединение с SSH-сервером в контейнере C1. Действительно, я получаю соединение только с хостом H1 и я получаю keyH представлен (похоже порт 22 хоста используется для клонирования). Конечно, это приводит к неудачному клону.

Но

Обычно (от одного и того же клиента) вытягивание и отправка формы этот dockerized git server работает при определении удаленного, например:

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? В чем тут разница / проблема?

Платформа

Из 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:// синтаксис.