Есть хост (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://
синтаксис.