我有一个驻留在 IBM 私有云容器注册表上的 docker 映像。从那里,它被远程获取和构建,以部署在 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.
编辑:基于不同的 SO 问题,我将 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
当密钥是未加密的密钥时我会收到。