docker中的ssh-add-无法打开与身份验证代理的连接

时间:2018-12-06 07:47:56

标签: git docker ssh ssh-agent

我正在尝试为我的Python flask API创建一个docker镜像。

我需要git来安装依赖项,并且已经在docker中安装了git几次。但是在这里,我不明白自己在做什么错。

使用docker:

ThemeOptions

我执行命令:

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 . 

eval 函数为ssh-agent检索了PID,但我无法连接到它。

已解决

我终于发现我做错了。首先,我的构建参数不正确。正确的 docker build 命令如下:

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

而且,我也不知道为什么,git正确处理了我的ssh密钥而不使用了

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 . 

上述导致的命令无法连接到您的代理错误。

然后,正确的文件是

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

3 个答案:

答案 0 :(得分:2)

我相信与您容器中ssh配置相关的问题,Ubuntu中的默认ssh策略是拒绝root远程登录。

要启用它,请将以下行添加到您的Dockerfile中。

  

运行echo“ PermitRootLogin yes” >> / etc / ssh / sshd_config

此行编辑/ etc / ssh / sshd_config文件以允许root登录,但是您需要重新启动sshd服务,为此,您还必须在Dockerfile中添加以下行。

  

运行systemctl restart sshd

如果您信任证书,只需在-ssh-add中添加-K标志即可。

  

运行ssh-add -k /root/.ssh/id_rsa

使用-k选项将密钥加载到代理中或从代理中删除密钥时,仅处理普通私钥并跳过证书。

我希望这会有所帮助。
最好的问候,

答案 1 :(得分:0)

我认为您必须在ssh-add中添加-K参数,请点击以下链接:

setuptools

他们使用带有-K参数的ssh-add:

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

答案 2 :(得分:0)

而不是编写这些命令

RUN eval "$(ssh-agent -s)"
RUN ssh-add /root/.ssh/id_rsa  
RUN pip3 install --no-cache-dir -r requirements.txt

使用不同的 RUN 语句,在单个层中执行它们,即:

RUN eval "$(ssh-agent -s)" && \
    ssh-add /root/.ssh/id_rsa && \
    pip3 install --no-cache-dir -r requirements.txt

试过了,没有任何问题。