首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将SSH密钥安全传递给码头建设?

如何将SSH密钥安全传递给码头建设?
EN

Stack Overflow用户
提问于 2016-09-20 13:54:23
回答 4查看 4.3K关注 0票数 4

我想为devs创建一个复制我们的生产服务器的Docker映像。这些服务器是由Ansible配置的。

我的想法是运行一个ansible-pull来应用容器内的所有配置。问题是我需要SSH键来提取剧本,但是我不想共享Docker映像上的SSH键。

因此,有一种方法可以在构建时不让SSH键在运行时使用?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-09-20 14:22:52

问得好。这样做的简单方法是在构建中的Ansible stuff之后移除SSH键,但是因为Docker将图像存储为层,所以仍然可以找到包含键的旧层。

如果您构建这个Dockerfile:

代码语言:javascript
复制
FROM ubuntu                                                                       
COPY ansible-ssh-key.rsa /key.rsa                                                    
RUN [ansible stuff]
RUN rm /key.rsa

最后的映像将拥有所有的不可访问状态,SSH键将消失为,但是有人可以轻松地运行docker history来查看所有图像层,只需在删除密钥之前从中间层启动容器,并获取密钥。

诀窍是这样做,然后使用贾森·怀尔德( Jason Wilder)的壁球对接工具来压缩最终图像。在压缩图像中,中间层消失了,无法获取已删除的键。

票数 2
EN

Stack Overflow用户

发布于 2016-09-20 19:33:41

我会设置一些本地文件服务工具,只在您的构建环境中可用。

例如,启动构建主机上的lighttpd,只向本地客户端提供您的pem文件。

在您的Dockerfile中,请在一次运行中添加/拉/清除:

代码语言:javascript
复制
RUN curl -sO http://build-host:8888/key.pem && ansible-pull -U myrepo && rm -rf key.pem

在这种情况下,它应该在一个层中完成,所以不应该在层提交后留下key.pem的痕迹。

票数 2
EN

Stack Overflow用户

发布于 2017-09-17 11:42:38

这是另一个解决方案,使用这个回购,船坞/金库,秘密商店将用于码头形象建设。

我创建了一个服务文档/金库和Ubuntu映像,在其中我将我的私钥附加到卷,并将其作为一个进程运行,

代码语言:javascript
复制
docker run -it -v ~/.ssh:/vault/.ssh ubuntu /bin/bash -c "echo mysupersecret > /vault/.ssh/key"

docker run -d -p 14242:3000 -v ~/.ssh:/vault/.ssh dockito/vault

这是我的Dockerfile

代码语言:javascript
复制
FROM ubuntu:14.04
RUN apt-get update -y && \
      apt-get install -y curl && \
      curl -L $(ip route|awk '/default/{print $3}'):14242/ONVAULT >   
      /usr/local   
      /bin/ONVAULT && \
      chmod +x /usr/local/bin/ONVAULT
ENV REV_BREAK_CACHE=1
RUN ONVAULT echo ENV: && env && echo TOKEN ENV && echo $TOKEN
RUN ONVAULT ls -lha ~/.ssh/
RUN ONVAULT cat ~/.ssh/key

您可以使用高寒linux来减少最终构建大小,并将映像构建为,

代码语言:javascript
复制
docker build -f Dockerfile -t mohan08p/VaultTest . 

你就完蛋了。你可以检查图像。机密没有存储在图像中,因为它是空的。

代码语言:javascript
复制
docker run -it mohan08p/VaultTest ls /root/.ssh

这是在构建时传递.ssh的好方法。唯一的缺点是我需要保持额外的Vault服务运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39596040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档