ssh-add in docker - Не удалось открыть соединение с вашим агентом аутентификации - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь создать образ докера для моего Python API фляги.

Мне нужен git для установки зависимостей, и я уже несколько раз устанавливал git в Docker.Но здесь я не могу понять, что я делаю неправильно.

С помощью докера:

FROM python:3.6-slim

ARG ssh_prv_key
ARG ssh_pub_key

RUN apt-get update && \
    apt-get install -y openssh-server &&\
    apt-get install -y git

# Authorize SSH Host
RUN mkdir -p /root/.ssh && \
    chmod 0700 /root/.ssh && \
    ssh-keyscan github.com > /root/.ssh/known_hosts

# Add the keys and set permissions
RUN echo "$ssh_prv_key" > /root/.ssh/id_rsa && \
    echo "$ssh_pub_key" > /root/.ssh/id_rsa.pub && \
    chmod 600 /root/.ssh/id_rsa && \
    chmod 600 /root/.ssh/id_rsa.pub && \
    echo "StrictHostKeyChecking no " > /root/.ssh/config


RUN eval "$(ssh-agent -s)"
RUN ssh-add /root/.ssh/id_rsa

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY requirements.txt /usr/src/app/
RUN pip3 install --no-cache-dir -r requirements.txt

# Remove SSH keys
RUN rm -rf /root/.ssh/

COPY ./my_api /usr/src/app

# Expose the Flask port
EXPOSE 5000

CMD [ "python", "./app.py" ]

Я выполняю команду:

docker build --build-arg ssh_prv_key=.keys/id_rsa --build-arg ssh_pub_key=.keys/id_rsa.pub -t my-api -f Dockerfile . 

, что дает мне следующую ошибку:

Step 7/16 : RUN eval "$(ssh-agent -s)"
 ---> Running in be450cc39533
Agent pid 9
Removing intermediate container be450cc39533
 ---> fb101226dc5f
Step 8/16 : RUN ssh-add /root/.ssh/id_rsa
 ---> Running in 4288e93db584
Could not open a connection to your authentication agent.
The command '/bin/sh -c ssh-add /root/.ssh/id_rsa' returned a non-zero code: 2

APID извлекается функцией eval для ssh-agent, но я не могу подключиться к нему.

решено

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

docker build --build-arg ssh_prv_key="$(cat .keys/id_rsa)" --build-arg ssh_pub_key="$(cat .keys/id_rsa.pub)" -t my-api -f Dockerfile . 

Кроме того, и я не знаю почему, git правильно обрабатывает мои ssh-ключи без использования

RUN eval "$(ssh-agent -s)"
RUN ssh-add /root/.ssh/id_rsa  

Приведенные выше команды, приводящие к , не могут соединиться с ошибкой вашего агента .

Тогда правильный файл будет

FROM python:3.6-slim

ARG ssh_prv_key
ARG ssh_pub_key

RUN apt-get update && \
    apt-get install -y git

# Authorize SSH Host
RUN mkdir -p /root/.ssh && \
    chmod 0700 /root/.ssh && \
    ssh-keyscan github.com > /root/.ssh/known_hosts

# Add the keys and set permissions
RUN echo "$ssh_prv_key" > /root/.ssh/id_rsa && \
    echo "$ssh_pub_key" > /root/.ssh/id_rsa.pub && \
    chmod 600 /root/.ssh/id_rsa && \
    chmod 600 /root/.ssh/id_rsa.pub


RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY requirements.txt /usr/src/app/
RUN pip3 install --no-cache-dir -r requirements.txt

# Remove SSH keys
RUN rm -rf /root/.ssh/

COPY ./my_api /usr/src/app

# Expose the Flask port
EXPOSE 5000

CMD [ "python", "./app.py" ]

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Я полагаю, что проблема, связанная с настройкой ssh ​​в вашем контейнере, стратегия ssh по умолчанию в Ubuntu заключается в отказе от удаленного входа в систему root.

Чтобы включить его, добавьте следующую строку в ваш Dockerfile.

RUN echo "PermitRootLogin yes" >> / etc / ssh / sshd_config

Эта строка редактирует файл / etc / ssh / sshd_config, чтобы разрешить вход в систему с правами root, но вам нужно перезапуститьСлужба sshd, чтобы сделать это, вы должны добавить следующую строку также в ваш Dockerfile.

RUN systemctl restart sshd

Также, если вы доверяете сертификату, просто добавьте-K флаг для ssh-add.

RUN ssh-add -k /root/.ssh/id_rsa

Опция -k используется при загрузке ключей в илиудаление ключей из агента, обработка только простых закрытых ключей и пропуск сертификатов.

Надеюсь, это поможет.С наилучшими пожеланиями,

0 голосов
/ 06 декабря 2018

Я думаю, что вы должны добавить параметр -K в ssh-add, перейдите по этой ссылке:

https://docs.docker.com/v17.12/docker-cloud/cloud-swarm/ssh-key-setup/#add-your-key-to-the-ssh-agent

Они использовали ssh-add с параметром -K:

ssh-add -K /root/.ssh/id_rsa

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...