22

我在我的几个项目中使用 Docker,其中一个要求是使用 Docker 文件生成 ssh 密钥,以便在构建容器时生成一对 rsa 密钥。我已经看到了一些通过 .sh 文件生成密钥的示例并且 Dockerfile 具有运行该 .sh 文件的通用性。有没有办法我们可以直接在 Dockerfile 中而不是 .sh

目前我在 Dockerfile 中使用以下内容来生成 ssh 密钥对。但这给了我错误说“/bin/sh ssh-keygen not found”

RUN ssh-keygen -q -t rsa -N '' -f /home/docker/.ssh/id_rsa

如果有人可以提供一种实现相同目标的方法,那将非常有帮助。

谢谢, 亚什

4

2 回答 2

48

问题是 ssh-keygen 在您的容器中尚不可用。这可以很容易地解决,例如通过在 ubuntu 基础镜像上安装 openssl-client 包。

以下 Dockerfile 正是这样做的,并将密钥放在容器的根文件夹中

FROM ubuntu:latest

RUN apt-get -y install openssh-client
RUN ssh-keygen -q -t rsa -N '' -f /id_rsa

但请阅读: 我的强烈建议是根本不要将密钥、证书放入容器的文件系统中!这可能会导致严重的安全风险,因为基本上任何获得容器镜像的人都可以在密钥有效的服务上验证自己;它迫使您像对待加密密钥和证书一样小心处理容器映像!

因此,建议将密钥保存在容器之外。这可以通过使用 Docker VOLUMES 轻松实现;并且您只需在启动 Docker 容器时将一个包含密钥/容器的卷挂载到 Docker 容器中。

在容器 外创建密钥 下面的 Dockerfile 会在容器启动后创建密钥,它可用于在容器文件系统之外创建密钥

FROM ubuntu:latest
RUN apt-get -y install openssh-client 
CMD ssh-keygen -q -t rsa -N '' -f /keys/id_rsa

首先,使用以下命令构建容器:

docker build -t keygen-container .

使用启动容器

docker run -v /tmp/:/keys keygen-container

将在 /tmp 中的主机上创建一个密钥。

于 2014-12-16T12:17:30.747 回答
5

上面的答案几乎是正确的,但您需要先 apt-get update 。也许它在以前的 ubuntu 图像上是正确的,但对我不起作用。此外,我首先删除了 localhost 目录中可能存在的所有 id_rsa 文件。

printf "FROM ubuntu:latest \nRUN apt-get update; apt-get -y install openssh-client \nCMD rm /keys/id_rsa*; ssh-keygen -q -t rsa -N '' -f /keys/id_rsa" > Dockerfile
docker build -t keygen-container .
docker run -v /tmp/:/keys keygen-container
于 2016-08-04T18:37:19.393 回答