Использование git клона "s sh: //" в Dockerfile - PullRequest
1 голос
/ 11 марта 2020

Я пытаюсь клонировать репозиторий компании из Gerrit в Dockerfile.

У меня нет проблем с предоставлением моего личного ключа S SH для образа, не сохраняя его там (с помощью многоступенчатой ​​сборки).

Моя проблема в том, что для репозитория компании на Gerrit требуется клон git через s sh:

git clone "ssh://usr@gerrit.com:port/path/to/repo

Я пытаюсь сделать это с помощью экспериментов buildKit. Команда run в Dockerfile:

RUN --mount=type=ssh git clone usr@gerrit.com:port/path/to/repo /image/path

Но это не говорит git, чтобы использовать s sh, и поэтому она просто использует свой стандартный протокол и порт.

Выполнение этого в Dockerfile приводит к следующей ошибке

#14 0.659 Cloning into '/image/path'...                                                                                                                                                                         
#14 0.890 Warning: Permanently added the ECDSA host key for IP address 'xxx.xxx.xxx.xxx' to the list of known hosts.
#14 6.740 Permission denied, please try again.
#14 6.774 Received disconnect from xxx.xxx.xxx.xxx port 22:2: Too many authentication failures
#14 6.774 Disconnected from xxx.xxx.xxx.xxx port 22
#14 6.774 fatal: Could not read from remote repository.
#14 6.774 
#14 6.774 Please make sure you have the correct access rights
#14 6.774 and the repository exists.

В ошибке четко указано, что она пытается использовать порт 22, хотя я указал иное.

Если Я использую RUN git clone "ssh://usr@gerrit.com:port/path/to/repo", в нем говорится, что он не может найти удаленного репо. Эта команда не выполняется только в Dockerfile, поскольку в моей компании это стандартный способ клонирования наших репозиториев.

Полный файл Docker находится здесь:

# syntax=docker/dockerfile:experimental
# Using multistage build, where intermediate stage is used for cloning private repo from gerrit
FROM ubuntu as intermediate

# install git
RUN apt-get update
RUN apt-get install -y git openssh-client

# add credentials on build
ARG SSH_PRIVATE_KEY
RUN mkdir /root/.ssh/
RUN echo "${SSH_PRIVATE_KEY}" > /root/.ssh/id_rsa && chmod 400 /root/.ssh/id_rsa

# Add gerrit to known hosts
RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan gerrit.com >> /root/.ssh/known_hosts

# Clone our repo from gerrit
RUN --mount=type=ssh git clone usr@gerrit.com:port/path/to/repo /image/path

# Actual build stage here
FROM ubuntu:18.04
...

Есть ли другой способ явного использования соединения s sh при использовании git clone в Dockerfile ?

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

Похоже, вы используете неправильный порт, Gerrit использует 29418 в качестве номера порта для соединений s sh, а не по умолчанию s sh порт 22.

Вы заявляете, что указали порт иначе, как ты это сделал? Вы пробовали жестко кодировать правильный номер порта в Dockerfile?

0 голосов
/ 11 марта 2020

При использовании s sh необходимо убедиться, что вы установили правильные разрешения для каталога .ssh и private keys

. Установите для разрешения /root/.ssh каталог 700

.

и /root/.ssh/id_rsa закрытый ключ на 600 в вашем Dockerfile

chmod 700 /root/.ssh && \
chmod 600 /root/.ssh/id_rsa

Кроме того, убедитесь, что ваши клавиши sh настроены правильно. Проверьте их на месте, прежде чем двигаться вперед.

...