如何安全地将SSH密钥传递给Docker Build?

我想为devs创建一个Docker镜像,以再现我们的生产服务器.这些服务器由Ansible配置.

我的想法是运行ansible-pull来应用容器内的所有配置.问题是我需要SSH密钥来提取剧本,但我不想在Docker镜像上共享SSH密钥.

那么,有一种方法可以在构建时使用SSH密钥,而无需在运行时使用它们吗?

最佳答案 好问题.执行此操作的简单方法是在构建中的Ansible内容之后删除SSH密钥 – 但由于Docker将图像存储为图层,因此有人仍然可以找到包含密钥的旧图层.

如果您构建此Dockerfile:

FROM ubuntu                                                                       
COPY ansible-ssh-key.rsa /key.rsa                                                    
RUN [ansible stuff]
RUN rm /key.rsa

最终图像将具有所有Ansible状态,SSH密钥将消失,但有人可以轻松运行docker history查看所有图像层,只需在删除密钥之前从中间层启动容器,然后抓住密钥.

诀窍是做这样的事情,然后使用Jason Wilder’s docker-squash tool来压缩最终图像.在压扁的图像中,中间层消失了,无法获取已删除的密钥.

点赞