我有一个驻留在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 repos。使用此代码,我收到以下错误
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
。
答案 0 :(得分:0)
我花了好几个小时来解决这个问题,结果是我需要编辑上面的代码,主要问题不是ssh-agent或其他任何东西。我将我的私钥作为dockerfile中的默认变量传递,因此我对所有新行进行了反对。
原来,私钥中的新行很重要
添加一堆\n
以在私钥中创建新行