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