使用dockerfile生成ssh密钥

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

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

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

如果有人可以提供一种方法来实现这一点,那么这将非常有帮助。

谢谢,亚希

问题是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 

但请阅读:我的强烈build议是不要把钥匙,证书放入容器的文件系统! 这可能会导致强大的安全风险,因为任何获得容器映像的人都可以在密钥有效的服务中validation自己; 它迫使你处理容器的图像,同样的照顾,你会对待encryption密钥和证书!

因此,build议将钥匙放在容器外面。 这可以通过使用Docker卷来轻松实现; 并且只需在启动时将容纳按键/容器的容器装入Docker容器。

在容器外部创build关键字下面的Dockerfile会在容器启动后创build关键字,并且可以用来在容器的文件系统之外创build关键字

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

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

 docker build -t keygen-container . 

使用开始容器

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

将在/ tmp主机上创build一个密钥。

答案在上面几乎是正确的,但是你需要先apt-get更新。 也许这是以前的Ubuntu的形象是正确的,但没有为我工作。 另外,我先删除本地主机目录中可能存在的任何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