Не удается заставить докер клонировать частные репозитории - PullRequest
0 голосов
/ 31 мая 2018

У меня есть образ докера, хранящийся в реестре контейнеров частного облака IBM.Оттуда он извлекается и собирается удаленно для развертывания в кластере Kubernetes.Безопасность не является проблемой для этого реестра, поэтому в настоящее время мы передаем наши ключи SSH как переменные.Мой текущий Dockerfile выглядит следующим образом:

FROM ubuntu:14.04
ARG SECRET_KEY="***"
ARG PUB_KEY="***"
RUN apt-get update
RUN apt-get install -y software-properties-common git ssh-client
RUN add-apt-repository ppa:deadsnakes/ppa
RUN apt-get update
RUN apt-get install -y python3-setuptools
RUN easy_install3 pip

RUN mkdir -p /app
COPY . /app
WORKDIR /app

RUN mkdir /root/.ssh
RUN echo "${SECRET_KEY}" > /root/.ssh/id_rsa
RUN echo "${PUB_KEY}" > /root/.ssh/authorized_keys
RUN ssh-keyscan git.ng.bluemix.net >> /root/.ssh/known_hosts

RUN chmod 600 /root/.ssh/id_rsa
RUN chmod 600 /root/.ssh/authorized_keys
RUN chmod 644 /root/.ssh/known_hosts
RUN chmod 755 /root/.ssh

RUN echo "IdentityFile ~/.ssh/id_rsa" >> /etc/ssh/ssh_config

RUN bash ./build.sh
RUN pip install -r requirements.txt
CMD ["python3", "-u", "updater.py"]

build.sh - это скрипт bash, который клонирует несколько частных репозиториев git.С этим кодом я получаю следующую ошибку

Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

Я искал решения, и они использовали ssh-agent.Используя eval $(ssh-agent -s), я получаю Agent pid 8

Однако, когда я включаю ssh-add -l или другие команды, я получаю Could not open a connection to your authentication agent.

РЕДАКТИРОВАТЬ: На основе другогоИтак, вопрос, я изменил пару строк в моем Dockerfile, чтобы получить

RUN eval `ssh-agent s` && \
    ssh-add /root/.ssh/id_rsa && \
    bash ./build.sh

, когда я прочитал, что ssh-agent уничтожен во время вызова ssh-add.Однако при этом я получаю Enter passphrase for /root/.ssh/id_rsa, когда ключ является незашифрованным ключом.

1 Ответ

0 голосов
/ 31 мая 2018

Я просто потратил часы на исправление этой ситуации и оказалось, что мой отредактированный код был нужен выше, главная проблема была не в ssh-agent или чем-то еще.Я передавал свой личный ключ в качестве переменной по умолчанию в файле docker, поэтому я отодвинул все новые строки.

Оказывается, новые строки в личном ключе важны

Добавление связки \n для создания новых строк в закрытом ключе

...